저는 C #에서 단위 테스트를 처음 접했고 Moq를 사용하는 법을 배우고 있습니다. 아래는 내가 테스트하려고하는 수업입니다.
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..
"MyMethod"메소드가 호출되고 있는지 확인하고 싶습니다. 뭔가 빠졌습니까?
죄송합니다 .. 내 질문을 편집했습니다 ..
—
user591410
올바른 길을 가고 있지만 게시 된 코드에 버그가 있습니다. 컴파일되지 않습니다-Someclass에서 케이싱, DoSomething에서 void 반환. 그런 다음 공개 액세스가 필요하며 DoSomething을 가상으로 만드십시오. 간단히 말해 프로덕션 코드에도 버그가있을 수 있습니다.
—
TrueWill
답변 주셔서 감사합니다. 모의 메서드를 설정하는 동안 인수를 잘못 설정했습니다 ..
—
user591410
"설정이 구성되지 않았습니다." 오해의 소지가 있습니다. 호출 될 메소드의 동작을 설정할 필요가 없습니다. 또한 테스트중인 메소드를 호출 한 후 "확인"메소드를 실행해야합니다 (따라서 괜찮습니다).
—
Sielu
SomeClass
대한 정의 가 없으면 컴파일MyMethod(string)
되지 않습니다.