2016-11-29 8 views
0

Я пытаюсь добавить интеграционное тестирование в свой проект, но я продолжаю получать ошибку «Тип или имя пространства имен« Запуск »не найден» в моих тестах. cs файл.Тип или имя пространства имен «Startup» не удалось найти

У меня есть два файла project.json, один в моем проекте src, а другой в моем тестовом проекте.

Src project.json выглядит следующим образом:

{ 
"dependencies": { 
"Microsoft.NETCore.App": { 
    "version": "1.0.1", 
    "type": "platform" 
}, 
"Microsoft.EntityFrameworkCore.SqlServer": "1.0.0", 
"Microsoft.EntityFrameworkCore.Tools": { 
    "version": "1.0.0-preview2-final", 
    "type": "build" 
}, 
"Microsoft.AspNetCore.Mvc": "1.0.1", 
"Microsoft.AspNetCore.Routing": "1.0.1", 
"Microsoft.AspNetCore.Server.IISIntegration": "1.0.0", 
"Microsoft.AspNetCore.Server.Kestrel": "1.0.1", 
"Microsoft.AspNetCore.StaticFiles": "1.0.0-*", 
"Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0", 
"Microsoft.Extensions.Configuration.FileExtensions": "1.0.0", 
"Microsoft.Extensions.Configuration.Json": "1.0.0", 
"Microsoft.Extensions.Configuration.CommandLine": "1.0.0", 
"Microsoft.Extensions.Logging": "1.0.0", 
"Microsoft.Extensions.Logging.Console": "1.0.0", 
"Microsoft.Extensions.Logging.Debug": "1.0.0", 
"Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0", 
"Npgsql.EntityFrameworkCore.PostgreSQL": "1.0.2", 
"Swashbuckle": "6.0.0-beta902" }, 
"tools": { 
"Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final", 
"Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final", 
// "Microsoft.EntityFrameworkCore.Tools.DotNet": "1.0.0-preview2-final", 
"Microsoft.Extensions.SecretManager.Tools": "1.0.0-preview2-final"}, 
"frameworks": { 
"netcoreapp1.0": { 
    "imports": [ 
    "dotnet5.6", 
    "portable-net45+win8"]}}, 
"buildOptions": { 
"emitEntryPoint": true, 
"preserveCompilationContext": true, 
"debugType": "portable", 
"xmlDoc": true}, 
"runtimeOptions": { 
"configProperties": { 
    "System.GC.Server": true 
}}, 
"publishOptions": { 
"include": [ 
    "wwwroot", 
    "**/*.cshtml", 
    "appsettings.json", 
    "web.config", 
    "Dockerfile.debug", 
    "Dockerfile", 
    "docker-compose.debug.yml", 
    "docker-compose.yml" 
]}, 
"scripts": { 
"postpublish": [ 
    "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" 
]}, 
"tooling": { 
"defaultNamespace": "api"}} 

Тест project.json выглядит следующим образом:

{ 
"version": "1.0.0-*", 
"buildOptions": { 
"debugType": "portable"}, 
"dependencies": { 
"System.Runtime.Serialization.Primitives": "4.1.1", 
"xunit": "2.1.0", 
"dotnet-test-xunit": "1.0.0-rc2-*", 
"SrcService": { 
    "target": "project" 
}, 
"Microsoft.AspNetCore.TestHost": "1.0.0"}, 
"testRunner": "xunit", 
"frameworks": { 
"netcoreapp1.0": { 
    "dependencies": { 
    "Microsoft.NETCore.App": { 
     "type": "platform", 
     "version": "1.0.1" 
    } 
    }, 
    "imports": [ 
    "dotnet5.4", 
    "portable-net45+win8" 
    ] 
}}} 

Мой Tests.cs класс выглядит следующим образом:

using System; 
using Xunit; 
using Microsoft.AspNetCore.TestHost; 
using System.Net.Http; 
using Microsoft.AspNetCore.Hosting; 


namespace Tests 
{ 
public class Tests 
{ 
    public TestServer server { get; } 
    public HttpClient client { get; } 

    public Tests(){ 
     var builder = new WebHostBuilder().UseStartup<Startup>(); 
     server = new TestServer(builder); 
     client = server.CreateClient(); 
    } 

[Fact] 
public async void TestVisitRoot() { 
    var response = await client.GetAsync("/"); 
    response.EnsureSuccessStatusCode(); 
} 
}} 

Кто-нибудь знает, почему я получаю эту ошибку? Заранее спасибо!

+1

где ваш класс 'Startup' определен? вам может потребоваться добавить директиву 'using', ссылаясь на ваше пространство имен или использовать полное имя класса с пространством имен' Your.Namespace.Startup'. – Ricky

ответ

1

Я вижу в вашем Project.json в тестовом проекте

"SrcService": { 
    "target": "project" 
} 

Так это значит, ваш класс запуска в этом проекте. Для того, чтобы быть признанным в вашем Test.cs вам просто нужно добавить using

using [namespace the Startup class is in]; 

И это должно быть именно это.

Подсказка: если вы используете Visual Studio, когда у вас есть что-то, что не распознается. Просто нажмите на него, а затем нажмите CTRL + . (или щелкните правой кнопкой мыши и Quick action and refactoring с VS2015)