我刚刚使用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的内容时,我看到注入的IClientDataProvider实例的属性IpAddress返回null而不是“ whatever”。

我做错了什么?


我将服务和必要的接口复制到一个空项目,然后模拟按预期工作。

在实际项目中,作为服务的构造函数自变量类型的接口是在3个独立的程序集中定义的,这些程序集具有进一步的依赖性。 在测试开始时出现了一些意外的“无法加载程序集”错误,因为那些直接引用的程序集还需要更多的程序集。 因此,这似乎是程序集加载的问题。

但是,我尝试通过使用Moq手动创建的模拟对象手动创建SUT实例来测试的变体,并且测试按预期工作

#1楼 票数:1 已采纳

该解决方案非常令人惊讶。 在创建单元测试项目时,我首先将参考添加到Moq 4.0。 后来添加了AutoFixture,由于它似乎需要Moq 3.1,因此我将该dll直接复制到bin \\ Debug。 但是,项目文件中相应的HintPath元素仍指向4.0 dll。 我将HintPath更改为Moq 3.1所在的位置后,测试就开始正常工作。 因此,马克的建议是正确的,但症状却大不相同。

  ask by Ivan Gerken translate from so

未解决问题?本站智能推荐:

2回复

如何让 AutoFixture AutoMoq 从实例化对象中的注入服务返回结果?

我正在尝试测试使用存储库服务的服务类。 我设置了自定义设置,我认为应该与我的存储库服务一起使用,但返回默认的匿名结果。 如果您查看下面的代码示例,当我调用 svc.GetFoos 方法时,我正在尝试获取我在自定义类中注册的“Foo”对象,但我什么也没得到: 如果我在夹具实例化后将以下代码添加到
1回复

AutoFixture + AutoMoq:使用排除的属性创建模拟

例如, ISomething是一个具有三个属性的接口: string Name和int Count以及一些我不想建立AutoFixture的复杂属性ImComplex (具有循环依赖等)。 因此,我需要使用AutoFixture来创建一个模拟的ISomething模拟,其Name和Count由
1回复

什么是AutoFixture AutoMoq?

当我注意到AutoFixture AutoMoq时,我正在寻找nuget并想要导入moq。 我看到AutoFixture是为了帮助更快地编写TDD,但我找不到AutoMoq的任何示例以及它与AutoFixture的不同之处。 有人能指出我这个AutoMoq所以我可以看到它在做什么。
1回复

使用NUnit AutoMoq的AutoFixture可防止测试运行

更新: AutoFixture团队在3.51版本中发布了此修复程序 。 只需扩展AutoDataAttribute : 然后在NUnit测试中使用此新属性而不是内置AutoData 。 从v4开始,此行为是默认行为。 上一篇文章 我正在尝试将AutoFixtur
1回复

AutoFixture / AutoMoq:无法创建实例(“ BadImageFormatException”)

以下是我当前遇到的问题的一个最小示例: using System.Net.WebSockets; using AutoFixture; using AutoFixture.AutoMoq; using FluentAssertions; using Xunit; ... [Fact] pu
2回复

AutoFixture AutoMoq不使用我的模拟属性

我有一个我想测试的抽象类。 这个类中有一个抽象属性用于我的DAO,我在继承的类中定义它。 我想测试Updatedeviceindexes方法,所以我试图模拟一个名为DeviceGroupDao的属性。 我还尝试以这种方式为我的设备对象添加注册: 但我仍然得到一个新的对象
1回复

AutoFixture AutoMoq不为某些属性创建模拟

我正在使用AutoFixture与AutoMoqCustomization并尝试创建一个包含readonly属性的类的实例,因此: 这个想法是我应该能够使用以下方法冻结我的测试ILog测试: 并验证它在主方法调用之后被调用: 但是,当我调用fixture.Create f
1回复

AutoFixture AutoMoq - SetReturnsDefault() 不适用于夹具创建的模拟

我有一个模拟。 这个模拟有两个方法, MethodA()和MethodB() 。 我想设置这两种方法来返回false 。 我创建了各种版本的代码,它们都应该可以工作,但有些不能: 这些工作: 1. 2. 3. 这些没有: 4. 5. 6. 根据结果​​,罪魁