moq를 사용하여 일부 메서드 만 모의
다음과 같은 방법이 있습니다.
public CustomObect MyMethod()
{
var lUser = GetCurrentUser();
if (lUser.HaveAccess)
{
//One behavior
}
else
{
//Other behavior
}
//return CustomObject
}
IMyInterface.GetCurrentUser
호출하는 동안 MyMethod
코드 경로 중 하나에 도달하여 확인할 수 있도록 mock하고 싶습니다 . Moq로 어떻게할까요?
나는 다음 일을하고있다 :
var moq = new Mock<IMyInterface>();
moq.Setup(x => x.GetCurrentUser()).Returns(lUnauthorizedUser);
//act
var lResult = moq.Object.MyMethod();
그러나 어떤 이유로 lResult
항상 null
내가으로 얻으려고 할 때 MyMethod
디버그 항상 다음 문으로 건너 뛰는거야.
이것을 부분 모의 (partial mock)라고하며 moq에서 수행하는 방법은 인터페이스가 아닌 클래스를 모의 한 다음 모의 객체의 "Callbase"속성을 "true"로 설정해야합니다.
이를 위해서는 테스트중인 클래스의 모든 메서드와 속성을 가상으로 만들어야합니다. 이것이 문제가 아니라고 가정하면 다음과 같은 테스트를 작성할 수 있습니다.
var mock = new Mock<YourTestClass>();
mock.CallBase = true;
mock.Setup(x => x.GetCurrentUser()).Returns(lUnauthorizedUser);
mockedTest.Object.MyMethod();
Lee의 대답을 확장하면 ,
클래스의 모든 메서드와 속성을 가상으로 만들 필요는 없으며 모의하려는 것만 가능합니다.
또한 클래스의 구체적인 구현을 조롱해야합니다.
var mock = new Mock<YourTestClass>(); // vs. var mock = new Mock<IYourTestInterface>();
클래스에 기본 생성자가없는 경우 다음을 통해 전달할 인수도 지정해야합니다.
var mock = new Mock<YourTestClass>(x, y, z);
// or
var mock = new Mock<YourTestClass>(MockBehavior.Default, x, y, z);
x, y, z
생성자에 대한 첫 번째, 두 번째 및 세 번째 매개 변수는 각각 어디에 있습니까 ?
마지막으로, 모의하려는 방법이 보호되는 경우 다음을 포함해야합니다. Moq.Protected
using Moq.Protected;
TReturnType returnValue = default(TReturnType);
mock.Protected()
.Setup<TReturnType>("YourMockMethodName", It.IsAny<int>()) // methodname followed by arguments
.Returns(returnValue);
비슷한 경우가있었습니다. 다음 코드는 인터페이스의 특정 구현에서 모의 메서드와 실제 메서드를 모두 사용할 수있는 유연성을 제공했습니다.
var mock = new Mock<ITestClass>(); // Create Mock of interface
// Create instance of ITestClass implementation you want to use
var inst = new ActualTestClass();
// Setup to call method of an actual instance
// if method returns void use mock.Setup(...).Callback(...)
mock.Setup(m => m.SomeMethod(It.IsAny<int>())
.Returns((int x) => inst.SomeMethod(x));
이제 실제 메서드를 사용할 수 있지만 Verify
호출 된 횟수를 확인하는 것과 같은 것도 사용할 수 있습니다 .
참고URL : https://stackoverflow.com/questions/4769928/using-moq-to-mock-only-some-methods
'Programing' 카테고리의 다른 글
바둑판 식 배경 이미지 : UIImageView로 쉽게 할 수 있습니까? (0) | 2020.12.03 |
---|---|
jQuery에 함수를 추가하는 방법은 무엇입니까? (0) | 2020.12.03 |
면도기 파일 내에서 CSS @media를 어떻게 지정할 수 있습니까? (0) | 2020.12.03 |
여러 파일 형식에 대해 FileSystemWatcher에 대한 필터를 설정하는 방법은 무엇입니까? (0) | 2020.12.03 |
하나의 특정 Laravel 마이그레이션 실행 (단일 파일) (0) | 2020.12.03 |