- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
默认情况下,Moq 不进行递归模拟。也就是说,对于对模拟没有期望的成员,Moq 返回默认值。例如,给定:
public interface IFoo
{
Bar Bar();
}
和
public class Bar
{
}
然后:
[TestMethod]
public void RecursiveMocksAreDisabledByDefaultInMoq()
{
var foo = new Mock<IFoo>().Object;
Assert.IsNull(foo.Bar());
}
但是,在 AutoFixture.AutoMoq 中,递归模拟是默认启用的,如:
[TestMethod]
public void RecursiveMocksAreEnabledByDefaultInAutoFixture()
{
var fixture = new Fixture().Customize(new AutoMoqCustomization());
var foo = fixture.Create<IFoo>();
Assert.IsNotNull(foo.Bar());
}
这是为什么呢?还有,如何关闭 AutoFixture.AutoMoq 中的自动递归模拟?
谢谢
Moq.3.1.416.3AutoFixture.AutoMoq.3.16.5
最佳答案
问题的评论应该回答原始问题为什么,但随后有后续评论:
It would be nice, though, to have an easy way to disable [recursive mocks].
这并不很难做到。如果您查看 AutoMoqCustomization
的实现,它是 use of MockPostProcessor
打开递归模拟。如果您不希望这样,您可以创建自己的不这样做的自定义:
public class AutoNonRecursiveMoqCustomization : ICustomization
{
public void Customize(IFixture fixture)
{
if (fixture == null)
throw new ArgumentNullException("fixture");
fixture.Customizations.Add(
new MethodInvoker(
new MockConstructorQuery()));
fixture.ResidueCollectors.Add(new MockRelay());
}
}
MockPostprocessor
还将 CallBase
设置为 true
,因此通过省略 MockPostprocessor
您还可以禁用 CallBase
设置。
关于c# - 为什么 AutoFixture.AutoMoq 默认进行递归模拟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21921789/
使用 AutoMoqCustomization 我本希望我的测试能成功,但它失败了。 这是测试: [Test, AutoMoqData] public void Test1( [Frozen]
我想探索我们是否可以通过设置 AutoMoq 创建的所有 Moq-mock 默认返回 Fixture 创建的值作为方法返回值来节省时间。 在进行如下测试时,这将是有益的: [TestMethod] p
当我注意到 AutoFixture AutoMoq 时,我正在查看 nuget 并想导入 moq。我看到 AutoFixture 是为了帮助更快地编写 TDD,但我找不到 AutoMoq 的任何示例以
我想知道在使用设置 AutoData 的测试用例时,是否有一种方法可以在调用被测系统 (SUT) 的构造函数之前为依赖项设置模拟. 我的 SUT 看起来像: class Sut { priva
我有一个要测试的抽象类。我的 DAO 在这个类中有一个抽象属性,我在继承的类中定义了它。 public abstract class DeviceGroupManagerBase where TDev
我将 AutoFixture 与 AutoMoqCustomization 一起使用并尝试创建一个包含只读属性的类的实例: public override ILog Logger { get; } =
我刚刚开始在我的单元测试中使用 AutoFixture.AutoMoq,我发现它对于创建我不关心具体值的对象非常有帮助。毕竟,匿名对象创建就是它的全部。 当我关心一个或多个构造函数参数时,我遇到了困难
我想编写一个单元测试来覆盖对象图中相当深的一些只读属性。我的意思是这样的方法: public string MethodToTest(IClassA classA) { return clas
当我需要模拟一些像这样的类时: public class Dummy { private readonly int _someInt; private readonly int _someOt
希望有人能给我出出主意。 我需要创建一个满足以下条件的模拟对象: 它实现了 IEntity 接口(interface)。 它使用我在 EntityBase 中已有的基础实现。 属性是使用 AutoFi
默认情况下,Moq 不进行递归模拟。也就是说,对于对模拟没有期望的成员,Moq 返回默认值。例如,给定: public interface IFoo { Bar Bar(); } 和 publ
public interface IResult { bool Success { get; } } public interface IResult : IResult { } 使用 Aut
更新: AutoFixture 团队 released a fix为此,在 3.51 版中。 只需扩展 AutoDataAttribute这样做: public class AutoDataFixed
例如 ISomething是一个具有三个属性的接口(interface):string Name和 int Count和一些复杂的属性ImComplex (具有循环依赖等)我不想建立 AutoFixt
我将 AutoFixture 与 AutoMoq 一起使用。我尝试创建一个类的假实例,该类的属性带有 getter 但没有 setter。我希望 AutoFixture 能够配置模拟,这样即使没有 s
我正面临一个与 AutoFixture 相关的奇怪问题和 AutoMoqCustomization以及它如何处理具体类的自动模拟。我怀疑我没有很好地使用它,但想知道问题出在哪里。首先是她的一些背景。假
我提议在我们公司使用 AutoFixture 和 AutoFixture.xUnit,并且已经获得授权,对于某些对象和字段,他们需要以预期方式格式化的随机数据。例如,他们希望 PersonName 只
既然已经找到了解决方案,那么简短的总结: AutoFixture 返回卡住模拟就好了;我的 sut 也是由 AutoFixture 生成的,它只有一个公共(public)属性,其中包含对测试很重要的本
我正在尝试测试使用存储库服务的服务类。我有自定义设置,我认为应该与我的存储库服务一起使用,但返回默认的匿名结果。如果您查看下面的代码示例,当我调用 svc.GetFoos 方法时,我试图取回我在自定义
我写这篇文章是因为我尝试了一点自己解决这个问题,但没有成功。无论出于何种原因,我能找到的每个示例似乎都表明这只是开箱即用,但每当我尝试这样做时,我总是会出错。基本上,我有一个 Controller ,
我是一名优秀的程序员,十分优秀!