使用Moq,我有一个非常奇怪的问题,如果我设置的方法是公共的,模拟上的设置似乎只能工作.我不知道这是一个Moq bug还是我错了(Moq的新手).以下是测试用例:
public class TestClass
{
public string Say()
{
return Hello();
}
internal virtual string Hello()
{
return "";
}
}
[TestMethod]
public void Say_WhenPublic_CallsHello()
{
Mock<TestClass> mock = new Mock<TestClass>();
mock.Setup(x => x.Hello()).Returns("Hello World");
string result = mock.Object.Say();
mock.Verify(x => x.Hello(), Times.Exactly(1));
Assert.AreEqual("Hello World", result);
}
Run Code Online (Sandbox Code Playgroud)
该消息失败了:
Say_WhenPublic_CallsHello失败:Moq.MockException:调用没有在仿1次进行的:X => x.Hello()在Moq.Mock.ThrowVerifyException(IProxyCall预期,表达表达,倍)...
如果我像这样公开Hello方法,则测试通过.这是什么问题?
public virtual string Hello()
{
return "";
}
Run Code Online (Sandbox Code Playgroud)
提前致谢!
我想测试以下逻辑(这显然是我的方法的精简版):
public void myPublicMethod(params) {
if(some_condition)
privateMethod1();
else
privateMethod2();
}
Run Code Online (Sandbox Code Playgroud)
我已经模拟了方法中的所有其他依赖项,并且我已经设置了它以便我可以保证some_condition为true.我想要做的是验证我的privateMethod1()只被调用一次,并且根本不调用privateMethod2().这可能与Moq有关吗?
以下是有关该问题的一些注意事项:
有什么想法吗?提前致谢.我愿意接受这不可能做到,但我想知道这种或那种方式.
我有以下课程:
class MyClass {
public void doIt() {
methodOne();
methodTwo();
methodThree();
}
private void methodOne() {
// ...
}
// rest of methods similar...
}
Run Code Online (Sandbox Code Playgroud)
我的目的是验证当我调用doIt()时,将按顺序调用方法metodOne(),methodTwo()和methodThree().
我正在使用mockito进行嘲弄.有谁知道我如何测试这种情况?