gpt4 book ai didi

c# - 无法理解最小起订量

转载 作者:行者123 更新时间:2023-11-30 15:23:13 24 4
gpt4 key购买 nike

我无法掌握 Moq 框架。他们从最小起订量网站给出了这个例子......

// Assumptions:
public interface IFoo {
public bool DoSomething(string);
public bool TryParse(string, out string));
}

var mock = new Mock<IFoo>();
mock.Setup(foo => foo.DoSomething("ping")).Returns(true);

Moq 设置在这里做什么?

// out arguments
var outString = "ack";
// TryParse will return true, and the out argument will return "ack", lazy evaluated
mock.Setup(foo => foo.TryParse("ping", out outString)).Returns(true);

同样的问题.. 正在设置什么?

有人知道可能更深入的最小起订量指南吗?我读了这个SO post书在哪The Art of Unit Testing with Examples in .NET推荐,但这本书很旧,已经绝版了。

最佳答案

关于模拟的一般背景,this answer很好地解释了它以及您可能希望在单元测试中使用它的原因。

具体来说,Moq 是一个允许您轻松创建模拟对象并控制其行为的库。用例子描述是最容易的,所以让我们看看你的第一个代码示例:

public interface IFoo {
public bool DoSomething(string);
public bool TryParse(string, out string));
}

/* 1 */ var mock = new Mock<IFoo>();
/* 2 */ mock.Setup(foo => foo.DoSomething("ping")).Returns(true);

第 1 行创建 IFoo 接口(interface)的模拟实现。在幕后,最小起订量正在使用 Castle DynamicProxy库动态创建 IFoo 的具体实现,然后将其包装在自己的 Mock 类中,以便我们可以配置其行为。

现在我们有了一个模拟对象,我们将经常需要配置它如何响应调用其方法。这样,我们就可以测试我们的被测系统将如何对其使用react。第 2 行的 Setup 方法就是这样做的,它告诉我们的模拟对象在 DoSomething 被调用时返回 true 并且参数等于 “平”。想象一下,您正在使用这个模拟来测试如下类:

public class TestObject 
{
public string TestMethod(IFoo foo)
{
if (foo.DoSomething("ping"))
return "ping";
else if (foo.DoSomething("pong"))
return "pong";
return "blah";
}
}

要获得完整的测试覆盖率,您需要一个 IFoo 的实现,它可以:

  1. 在一次测试中为 “ping” 返回 true
  2. 在另一个测试中为 “pong” 返回 true
  3. 对上次测试中的任何参数返回false

可以创建您自己的具有此行为的模拟对象,例如:

public class MockFoo : IFoo
{
string trueValue;

public MockFoo(string trueValue)
{
this.trueValue = trueValue;
}

public bool DoSomething(string value)
{
return value == trueValue;
}
}

但是当您有复杂的逻辑、多个参数或许多依赖项时,这会很痛苦;它只是不能很好地扩展。这就是模拟对象和 Moq 可以使事情变得简单的地方。三个测试在 Moq 中的相同设置是:

  1. mock.Setup(foo => foo.DoSomething("ping")).Returns(true);
  2. mock.Setup(foo => foo.DoSomething("pong")).Returns(true);
  3. mock.Setup(foo => foo.DoSomething(It.IsAny<string>())).Returns(false);

在我看来,对于您期望 IFoo 依赖项的行为方式,这更简单也更能表达。

至于指南,我认为您最好使用一般模拟指南而不是特定于最小起订量的指南。 Moq 只是一个使使用模拟对象更容易的库,Quickstart对于使用 Moq 的机制来说是一个很好的引用。有几十个模拟教程和指南,只需寻找一些。请记住,在我开始使用它们之前,它对我来说并没有真正的“点击”。找一个coding kata并尝试为自己模拟!

关于c# - 无法理解最小起订量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34683150/

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