4
我想在Web API上执行集成测试,而不依赖于业务层接口。模拟用于集成测试Web API的业务层
当这个动作被执行:
1)我想嘲笑_Service对象并确认被称为
2)我想断言,返回正确的StatusCode
编号2是没有问题的,但是当我不控制/手动开始创建api控制器时,如何模拟_service对象(ISchoolyearService),因为这是一个在单元测试控制器中完成的任务。但我不想单元测试我的API!
[RoutePrefix("api/schoolyears")]
public class SchoolyearController : ApiController
{
private readonly ISchoolyearService _service;
public SchoolyearController(ISchoolyearService service)
{
_service = service;
}
[Route("")]
[HttpPost]
public HttpResponseMessage Post([FromBody]SchoolyearCreateRequest request)
{
_service.CreateSchoolyear(request);
return Request.CreateResponse(HttpStatusCode.Created);
}
您是否部署到特定集成测试环境?您可以简单地在您的Web.Config中添加一个关键字,该关键字在特定的测试环境中表示IntegrationTesting = true,并且在您定义“ISchoolyearService”的注入时在真正的实现或您在IntegrationTesting == true时创建的模拟服务之间切换。 – Karhgath
“部署到特定的集成测试环境”?你会说测试自我托管与iis托管吗?我正在使用HttpServer和HttpClient进行集成测试。但无论如何,我不明白你的建议如何能帮助我。 – Elisabeth
那么,您使用什么IoC将真正的服务注入ISchoolyearService?根据Web.Config中的键,您可以在模拟对象或实际服务之间切换。如果你的问题是关于如何创建模拟对象,你可以通过手工或使用许多模拟框架来完成,例如Moq:http://www.nuget.org/packages/MOQ。也许你可以指出我的问题的具体细节? – Karhgath