使用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)
提前致谢!
我需要一个美国邮政编码的正则表达式.我发现了很多例子,但没有一个允许邮政编码也是可选的.你看,我在非必需的输入字段上使用它,所以有效的场景是5位邮政编码,5 + 4位邮政编码,或根本没有邮政编码.这是我到目前为止所做的,但它不适用于"根本没有邮政编码"的情况:
^(\d{5}(?:\-\d{4})?)$
Run Code Online (Sandbox Code Playgroud)