我刚刚使用AutoFixture创建了我的第一个测试。 SUT具有以下构造函数。通过AutoFixture注入模拟对象与AutoMoq,意外的行为
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
内容,我看到的IClientDataProvider
回报注入实例的属性IpAddress
空,而不是“无所谓”。
我做错了什么?
我将服务和必要的接口复制到一个空项目,然后模拟工作正常。
作为实际项目中服务的构造函数参数类型的接口在3个独立的程序集中定义,这些程序集有更多的依赖关系。我在测试启动时出现了一些意想不到的“无法加载程序集”错误,因为这些直接引用的程序集需要多个进一步的程序集。所以它似乎是一个程序集加载问题。
不过,我想测试的变化与手动创建使用起订量手动创建模拟对象的SUT实例和测试工作如预期
你的代码看起来很好,我无法重现你的问题。对我来说,IpAddress包含“无论”......你可以在一个空的项目中尝试它吗?什么是AuditHistoryLoggingService? – nemesv
AuditHistoryLoggingService - 作为LoggingService读取,我试图从原始代码中删除“过多的字符”。 –
IpAddress属性('String'类型)具有正确的值。我在LogginService类构造函数中添加了一个断点,并检查了'IClientDataProvider'实例。你可以复制粘贴你的'LoggingService'类吗? –