使用Moqvalidation方法调用
我对C#中的unit testing和学习使用Moq相当陌生。 下面是我正在testing的类。
class MyClass { SomeClass someClass; public MyClass(SomeClass someClass) { this.someClass = someClass; } public void MyMethod(string method) { method = "test" someClass.DoSomething(method); } } class Someclass { public DoSomething(string method) { // do something... } }
以下是我的TestClass:
class MyClassTest { [TestMethod()] public void MyMethodTest() { string action="test"; Mock<SomeClass> mockSomeClass = new Mock<SomeClass>(); mockSomeClass.SetUp(a => a.DoSomething(action)); MyClass myClass = new MyClass(mockSomeClass.Object); myClass.MyMethod(action); mockSomeClass.Verify(v => v.DoSomething(It.IsAny<string>())); } }
我得到以下例外:
Expected invocation on the mock at least once, but was never performed No setups configured. No invocations performed..
我只想validation方法“MyMethod”是否被调用。 我错过了什么吗?
提前致谢!
你正在检查错误的方法。 Moq要求您在依赖类中设置(然后selectvalidation)方法。
你应该做更像这样的事情:
class MyClassTest { [TestMethod] public void MyMethodTest() { string action = "test"; Mock<SomeClass> mockSomeClass = new Mock<SomeClass>(); mockSomeClass.Setup(mock => mock.DoSomething()); MyClass myClass = new MyClass(mockSomeClass.Object); myClass.MyMethod(action); // Explicitly verify each expectation... mockSomeClass.Verify(mock => mock.DoSomething(), Times.Once()); // ...or verify everything. // mockSomeClass.VerifyAll(); } }
换句话说,你正在validation调用MyClass#MyMethod
,你的类肯定会在这个过程中调用SomeClass#DoSomething
。 请注意,你不需要Times
参数。 我只是在展示它的价值。