使用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参数。 我只是在展示它的价值。