gpt4 book ai didi

c# - AutoMoqer : Passing parameters into constructors

转载 作者:行者123 更新时间:2023-11-30 12:33:48 25 4
gpt4 key购买 nike

当我需要模拟一些像这样的类时:

public class Dummy
{
private readonly int _someInt;
private readonly int _someOtherInt;
private readonly IFoo _foo;

public Dummy(int someInt,int someOtherInt, IFoo foo)
{
_someInt = someInt;
_someOtherInt = someOtherInt;
_foo = foo;
}
}

我使用 Moq 来做这样的事情:

[Test]
public void ShouldCreateADummyInstance()
{
var someInt = 1;
var someOtherInt = 2;

var mockFoo = new Mock<IFoo>();

var dummy = new Dummy(someInt, someOtherInt, mockFoo.Object);

//And so on...
}

但是当我使用 AutoMoq我无法在构造函数中为每个依赖项(我的意思是 someInt 和 someOtherInt)指定不同的 int,因为 AutoMoqer.SetInstace(instanceIWantToUse) 每次必须提供该依赖项时都会设置相同的指定实例。

您知道如何为 someInt 和 someOtherInt 指定不同的 int 以便在我的测试中继续使用 AutoMoqer 吗?

谢谢,希望你能帮帮我!

最佳答案

完全披露:我从未使用过 AutoMoq(尽管我只是在 GitHub 上注册关注它,因为它看起来很有趣,而且我喜欢减少样板代码的东西)。

也就是说,AutoMoq 工具似乎是为与您不同的用例而设计的。如果添加另一个构造函数注入(inject)的依赖项,他似乎将它用于“ future 证明”以防止损坏的单元测试,并且能够生成一个默认对象,其中包含用于依赖项的内容,大概是为了避免空引用异常。

在阅读 AutoMoq 项目页面后,我假设如果 Darren 正在编写您的特定单元测试,他可能会直接使用 Moq。也就是说,对于该特定测试,您可能应该使用已发布的测试。当您不想在测试中指定所有依赖项时,AutoMoq 似乎旨在提供合理的默认行为。但在您的情况下,您确实想要指定那些特定的依赖项。

仅仅因为您对该特定测试使用常规 Moq,并不意味着您不能将 AutoMoq 用于其他测试。其余测试(其中两个 int 均为零或其他)将面向 future ,但如果您将另一个构造函数参数添加到 Dummy 类,您可能只需要忍受那个中断。

(您也可以随时获取 AutoMoq 的源代码并根据需要修改它)。

关于c# - AutoMoqer : Passing parameters into constructors,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8406589/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com