【发布时间】:2019-04-19 21:00:08
【问题描述】:
我想测试一个方法Foo,它调用三个私有方法boo1、boo2、boo3确实是按照这个确切的顺序调用它们(这是对真实场景的简化)。
为了测试我计划使用Mock 对象的InSequence 方法的序列。
为了测试我计划使用PrivateObject 类的私有方法。
我不知道如何将这两者结合起来;这是我到目前为止所尝试的,但它似乎不起作用!
public class TestedClass
{
private void _boo1(object someParam)
{
//some logic
}
private void _boo2(object someParam)
{
//some logic
}
private void _boo3(object someParam)
{
//some logic
}
public void Foo(object someParam)
{
_boo1(someParam);
_boo2(someParam);
_boo3(someParam);
}
}
这里是我到目前为止创建的测试方法:
[TestMethod]
public void TestSequence()
{
var sequence = new MockSequence();
var mockedObject = new Mock<TestedClass>();
PrivateObject obj = new PrivateObject(mockedObject);
mockedObject.Object.Foo(It.IsAny<Object>());
mockedObject.InSequence(sequence).Setup(x => obj.Invoke("_boo1", BindingFlags.Default, It.IsAny<Object>()));
mockedObject.InSequence(sequence).Setup(x => obj.Invoke("_boo2", BindingFlags.Default, It.IsAny<Object>()));
mockedObject.InSequence(sequence).Setup(x => obj.Invoke("_boo3", BindingFlags.Default, It.IsAny<Object>()));
}
任何帮助将不胜感激。
【问题讨论】:
-
看看这个问题。也许它和你的相似:stackoverflow.com/questions/10602264/…
-
谢谢,但我希望测试私有方法的序列而不是公共方法
-
私有方法是一个实现细节,应该对类的用户隐藏。测试私有方法会破坏封装。在您的情况下,如果您更改
Foo的实现,您也必须更改您的单元测试,这完全没有意义。 -
如果你不模拟你的私有方法:是否有一些标准可以让你观察这三个方法是否以正确的顺序被调用?
标签: c# unit-testing reflection mocking