C# 如何在测试中使用NinjectSelfHostBootstrapper,并且有多个测试通过?
以下是我的NUnit测试代码(简化以隔离问题): 当我使用默认的C# 如何在测试中使用NinjectSelfHostBootstrapper,并且有多个测试通过?,c#,asp.net-web-api,ninject,C#,Asp.net Web Api,Ninject,以下是我的NUnit测试代码(简化以隔离问题): 当我使用默认的NinjectSelfHostBootstrapper运行该测试时,第一个测试顺利通过,但第二个测试抛出一个异常,表示: URI“”的注册已存在 当我检查这两个文件的代码时: 我可以理解为什么在后者中创建了HttpSelfHostServer,并且在服务器上调用了OpenAsync(),但是在服务器上没有调用CloseAsync(),这是一个错误还是我做错了什么?如何让NinjectSelfHostBootstrapper处理随
NinjectSelfHostBootstrapper
运行该测试时,第一个测试顺利通过,但第二个测试抛出一个异常,表示:
URI“”的注册已存在
当我检查这两个文件的代码时:
我可以理解为什么在后者中创建了
HttpSelfHostServer
,并且在服务器上调用了OpenAsync()
,但是在服务器上没有调用CloseAsync()
,这是一个错误还是我做错了什么?如何让NinjectSelfHostBootstrapper处理随后调用的测试?您有没有弄明白这一点?@RobertKaucher没有,对不起。
public class MyController : ApiController
{
[HttpGet]
[Route("api/route")]
public string Route1()
{
return "route";
}
}
[TestFixture]
public class MyTestFixture
{
private NinjectSelfHostBootstrapper _bootstrapper;
[SetUp]
public void SetUp()
{
var config = new HttpSelfHostConfiguration("http://localhost:8767");
config.MapHttpAttributeRoutes();
var kernel = new StandardKernel();
this._bootstrapper = new NinjectSelfHostBootstrapper(() => kernel, config);
this._bootstrapper.Start();
}
[TearDown]
public void TearDown()
{
if (this._bootstrapper != null)
{
this._bootstrapper.Dispose();
}
}
[Test]
public void MyTest1()
{
using (var client = new HttpClient())
{
var request = new HttpRequestMessage(HttpMethod.Get, "http://localhost:8767/api/route");
var response = client.SendAsync(request).Result;
var content = response.Content.ReadAsStringAsync().Result;
Assert.That(content, Is.EqualTo("\"route\""));
}
}
[Test]
public void MyTest2()
{
using (var client = new HttpClient())
{
var request = new HttpRequestMessage(HttpMethod.Get, "http://localhost:8767/api/route");
var response = client.SendAsync(request).Result;
var content = response.Content.ReadAsStringAsync().Result;
Assert.That(content, Is.EqualTo("\"route\""));
}
}
}