我想为我的 ASP.NET WebApi 服务编写一个测试,并针对自托管服务和实时 Web 托管服务运行它。我想这可以用一个测试夹具来完成,但我不知道如何设置它。有谁知道使用可配置测试夹具的示例,以便您可以将参数传递给 Xunit 以选择自托管夹具或网络托管夹具?
问问题
1028 次
2 回答
1
这是最新的 xUnit 2.0 beta 的工作方式。
创建一个夹具:
public class SelfHostFixture : IDisposable {
public static string HostBaseAddress { get; private set; }
HttpSelfHostServer server;
HttpSelfHostConfiguration config;
static SelfHostFixture() {
HostBaseAddress = ConfigurationManager.AppSettings["HostBaseAddress"]; // HttpClient in your tests will need to use same base address
if (!HostBaseAddress.EndsWith("/"))
HostBaseAddress += "/";
}
public SelfHostFixture() {
if (/*your condition to check if running against live*/) {
config = new HttpSelfHostConfiguration(HostBaseAddress);
WebApiConfig.Register(config); // init your web api application
var server = new HttpSelfHostServer(config);
server.OpenAsync().Wait();
}
}
public void Dispose() {
if (server != null) {
server.CloseAsync().Wait();
server.Dispose();
server = null;
config.Dispose();
config = null;
}
}
}
然后定义一个将使用该夹具的集合。集合是 xUnit 2 中对测试进行分组的新概念。
[CollectionDefinition("SelfHostCollection")]
public class SelfHostCollection : ICollectionFixture<SelfHostFixture> {}
它只是一个标记,所以没有实现。现在,将依赖于您的主机的测试标记在该集合中:
[Collection("SelfHostCollection")]
public class MyController1Test {}
[Collection("SelfHostCollection")]
public class MyController4Test {}
当从内部运行任何测试MyController1Test
并MyController4Test
确保您的服务器在每个集合中仅启动一次时,运行程序将创建您的夹具的单个实例。
于 2015-01-29T13:55:04.913 回答
0
我建议使用 In-Memory Server 来测试您的控制器,因此您不需要在单元测试中启动自主机。
http://blogs.msdn.com/b/youssefm/archive/2013/01/28/writing-tests-for-an-asp-net-webapi-service.aspx
于 2013-05-22T17:55:16.570 回答