我有一个传递像这样的对象的测试:
var repo = new ActualRepo();
var sut = new Sut(repo);
Run Code Online (Sandbox Code Playgroud)
在我的测试中,Repo有一个我需要实际执行的方法,而另一个我想模拟而不执行的方法。
因此,例如,使用以下伪代码:
var repo = new Mock<IRepo>();
repo.Setup(m => m.MethodIWantToCall()).WillBeExecuted();
repo.Setup(m => m.MethodIWantToMock()).Returns(false);
Run Code Online (Sandbox Code Playgroud)
使用最小起订量,这有可能吗?如何完成?
编辑:我过去使用过TypeMock,您可以做类似的事情。
Isolator.When(() => repo.MethodToIgnore()).WillBeIgnored();
Isolator.When(() => repo.MethodToActuallyRun()).WillBeExecuted();
Run Code Online (Sandbox Code Playgroud)
从这个问题不太确定这是否有用,但是如果要模拟的方法是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());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2493 次 |
| 最近记录: |