我刚刚使用 AutoFixture 创建了我的第一个测试。SUT 具有以下构造函数。
public LoggingService(
IClientDataProvider clientDataProvider, ... other dependencies...)
测试设置具有以下代码。
var fixture = new Fixture().Customize(new AutoMoqCustomization());
string ipAddress = "whatever";// fixture.CreateAnonymous<string>();
var clientDataProviderMock = fixture.Freeze<Mock<IClientDataProvider>>();
clientDataProviderMock.Setup(cdp => cdp.IpAddress).Returns(ipAddress);
LoggingService sut = fixture.CreateAnonymous<LoggingService>();
现在,当我检查 的内容时sut
,我看到IpAddress
注入的实例的属性IClientDataProvider
返回 null 而不是“whatever”。
我做错什么了?
我将服务和必要的接口复制到一个空项目中,然后模拟按预期工作。
作为实际项目中服务的构造函数参数类型的接口在 3 个单独的程序集中定义,这些程序集具有进一步的依赖关系。我在测试开始时遇到了几个意外的“无法加载程序集”错误,因为那些直接引用的程序集需要更多的程序集。所以这似乎是一个程序集加载问题。
但是,我尝试了测试的变体,手动创建 SUT 实例,使用 Moq 手动创建模拟对象,测试按预期工作