gpt4 book ai didi

moq - 如何设置 Moq 以执行 Moq 的某些方法

转载 作者:行者123 更新时间:2023-12-04 16:26:27 27 4
gpt4 key购买 nike

我有一个测试,我像这样传入一个对象:

var repo = new ActualRepo();

var sut = new Sut(repo);

在我的测试中,Repo 有一个我需要实际执行的方法,而另一个我想模拟而不执行的方法。

因此,以这个伪代码为例:

var repo = new Mock<IRepo>();

repo.Setup(m => m.MethodIWantToCall()).WillBeExecuted();
repo.Setup(m => m.MethodIWantToMock()).Returns(false);

使用 Moq,这可能吗?如何做到?

编辑:我过去使用过 TypeMock,你可以做类似的事情。

Isolator.When(() => repo.MethodToIgnore()).WillBeIgnored();
Isolator.When(() => repo.MethodToActuallyRun()).WillBeExecuted();

最佳答案

从问题中不太确定这是否有用,但如果您要模拟的方法是 virtual,则可以部分模拟对象。

public class Foo {
public string GetLive() {
return "Hello";
}

public virtual string GetMock() {
return "Hello";
}
}

public class Snafu {
private Foo _foo;
public Snafu(Foo foo) {
_foo = foo;
}

public string GetMessage() {
return string.Format("{0} {1}", _foo.GetLive(), _foo.GetMock());
}
}


[TestMethod]
public void NotMocked() {
var snafu = new Snafu(new Foo());
Assert.AreEqual("Hello Hello", snafu.GetMessage());
}


[TestMethod]
public void Mocked() {

var mockFoo = new Mock<Foo>();
mockFoo.Setup(mk => mk.GetMock()).Returns("World");

var snafu = new Snafu(mockFoo.Object);

Assert.AreEqual("Hello World", snafu.GetMessage());
}

关于moq - 如何设置 Moq 以执行 Moq 的某些方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12621129/

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