And*_*gur 4 c# asp.net integration-testing owin
当我向TestServer发出请求时,我得到404响应。而且我不明白为什么,因为我对普通服务器使用相同的配置,并且可以正常工作。对于发出请求,我使用TestServer.HttpClient。
对我来说,我的测试不知道所测试的内容。我认为与测试共享项目的WebApiConfig已经足够了,但是所有要做的就是为它提供空的路由信息。它没有告诉测试应该测试什么。因此,它只是转到http:// localhost / api / controller / action并获得404效果,就像您现在在浏览器中尝试过一样。
如何建立这种丢失的连接几乎没有。最接近的是 http://www.juliencorioland.net/archives/using-owin-to-test-your-web-api-controllers,但是它掩盖了最重要的部分-如何告诉测试要测试什么!
示例代码如下所示:
class OwinTestConf
{
public void Configuration(IAppBuilder app)
{
HttpConfiguration config = new HttpConfiguration();
config.Services.Replace(typeof(IAssembliesResolver), new TestWebApiResolver());
config.MapHttpAttributeRoutes();
app.UseWebApi(config);
}
Run Code Online (Sandbox Code Playgroud)
}
那是什么TestWebApiResolver?好吧,您创建一个继承自的类,DefaultAssembliesResolver然后重写GetAssemblies()。在其中加载您要测试的内容。关于如何执行此操作的文章不错:http://www.strathweb.com/2013/08/customizing-controller-discovery-in-asp-net-web-api/
从那里复制好东西,您的覆盖将如下所示:
public class MyAssembliesResolver : DefaultAssembliesResolver
{
public override ICollection<Assembly> GetAssemblies()
{
ICollection<Assembly> baseAssemblies = base.GetAssemblies();
List<Assembly> assemblies = new List<Assembly>(baseAssemblies);
var controllersAssembly = Assembly.Load("MyAssembly");
baseAssemblies.Add(controllersAssembly);
return assemblies;
}
}
Run Code Online (Sandbox Code Playgroud)
...其中“ MyAssembly”是您要测试的事物的程序集名称(右键单击项目->属性,它在第一个选项卡的顶部)
那使您克服了这一障碍。
第二个障碍使这种测试对我来说是一个破坏者。我终于收到了一个非404的响应,现在是500。我知道我的URL正确,因为稍微更改一下它们就可以再次返回404。问题是没有办法调试它。由于您只是引用要测试的程序集,因此无法介入其中并设置断点,而没有断点。无法告诉您测试失败原因的测试有什么好处?特别令人讨厌的是,它在IIS中运行良好。因此,我失去了对这是如何在野外运行代码的良好模拟的信任。
| 归档时间: |
|
| 查看次数: |
1938 次 |
| 最近记录: |