但是却有一个问题, 这里我选择的时StartupIntegrationTest. 而电脑环境变量设置的是Development, 而调试测试之后发现走的是StartupDevelopment.
也许这是个Bug? 或者就是这样的意图. 那我暂时还是使用原始的方法创建TestServer吧, 下面是我使用的代码:
建立一个TestServerFixture, 需要使用IDisposable来做清理工作:
而测试类注入该Fixture即可:
然后重跑测试, 会pass的:
一个复杂点的例子
我要测试这个Controller下CreateProduct方法对应的行为. 该Controller需要很多依赖项, 其中两个还需要使用数据库.
通常情况下集成测试里使用的数据库和生产环境中使用的数据库不同, 在测试环境我更倾向于使用内存类数据库.
EF Core里面至少有两个内存类的数据库提供商:
Microsoft.EntityFrameworkCore.InMemory, 这个都应该知道.
Microsoft.EntityFrameworkCore.Sqlite. 虽然说Sqlite通常是把数据保存到文件, 但是提供商为它提供了一个内存模式, 把数据库保存到了内存里.
在StartupIntegrationTest里, 我就使用InMemory吧;
下面是测试方法的代码:
这代码其实很简单, 就是对应着被测试的Controller方法做一些需要的设定即可, 例如Headers, Content-Type等等.
需要注意的是Content-Type是在Content的Header里设置, 而不是Request的Headers里设置, 否则会报乱用Header的错.
该测试会pass:
最后针对该行为再做一个Model验证失败的测试:
没什么不同, 就是model的Name属性超长了.
这个测试同样会通过:
集成测试就简单介绍这些.......
上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。