【发布时间】:2015-08-01 00:45:20
【问题描述】:
我有 webapi,出于测试目的,我在 owin 中托管。我已经使用autofac进行了设置。现在,当我测试时,我想注入 moq 依赖项。到目前为止,我无法做到。我已阅读文档并进行了一些研究,但我遗漏了一些东西。
这里是测试代码。
[Test]
public void Request_all_airports()
{
const int port = 8086;
AirportCollection moqAirportCollection = new AirportCollection();
moqAirportCollection.Airports = new List<Airport>{new Airport{IATA = "moq",Name = "moqName"}};
using (WebApp.Start<Startup>("http://localhost:" + port))
{
using (var mock = AutoMock.GetLoose())
{
var moqObj = mock.Mock<IAirportService>().Setup(x => x.GetAirports()).Returns(moqAirportCollection);
var client = new HttpClient {BaseAddress = new Uri("http://localhost:" + port)};
var response = client.GetAsync("/api/airport/get").Result;
var body = response.Content.ReadAsStringAsync().Result;
var airportCollection = JsonConvert.DeserializeObject<AirportCollection>(body);
}
}
}
请看一看。让我知道我错过了什么。如果您想查看控制器代码或任何其他部分,请告诉我。
这里是启动代码
public class Startup
{
public static IContainer container { get; set; }
public void Configuration(IAppBuilder appBuilder)
{
var httpConfig = new HttpConfiguration();
container = AutofacSetup.Register(httpConfig);
WebApiConfig.Register(httpConfig);
appBuilder.UseAutofacMiddleware(container);
appBuilder.UseAutofacWebApi(httpConfig);
appBuilder.UseWebApi(httpConfig);
}
}
谢谢
我想我已经在人们的帮助下解决了这个问题。这是我的代码。
var moq = new Mock<IAirportService>();
moq.Setup(x => x.GetAirports()).Returns(moqAirportCollection);
newBuilder.RegisterInstance(moq.Object).As<IAirportService>();
newBuilder.Update(Startup.container);
我没有重建我刚刚更新的约束。 autofac 具有使用最新注册的行为,因此它将在此处使用 mocked。
【问题讨论】:
-
在您的应用程序中,您是否在启动时注册了您的依赖项?你能发布你的启动代码和DI设置吗?
-
@AnishPatel 我已经发布了启动代码。在启动时,我正在调用一个自定义类 AutofacSetup.Register,它正在注册所有依赖项。如果你想看看这个,请告诉我。
-
@AnishPatel 请看一看。我已经用可能的解决方案更新了这个问题,它正在工作,请看看,让我知道你的想法。
标签: c# unit-testing asp.net-web-api owin autofac