테스트 결과 올바른 매개 변수를 사용하여 특정 메서드가 호출되었는지 어떻게 테스트 할 수 있습니까? NUnit을 사용하고 있습니다.특정 메소드가 NUnit을 사용하여 호출되었다는 것을 어떻게 주장 할 수 있습니까?
이 메서드는 아무 것도 반환하지 않습니다. 그냥 파일에 씁니다. System.IO.File
에 대한 mock 객체를 사용하고 있습니다. 그래서 함수 호출 여부를 테스트하고 싶습니다.
테스트 결과 올바른 매개 변수를 사용하여 특정 메서드가 호출되었는지 어떻게 테스트 할 수 있습니까? NUnit을 사용하고 있습니다.특정 메소드가 NUnit을 사용하여 호출되었다는 것을 어떻게 주장 할 수 있습니까?
이 메서드는 아무 것도 반환하지 않습니다. 그냥 파일에 씁니다. System.IO.File
에 대한 mock 객체를 사용하고 있습니다. 그래서 함수 호출 여부를 테스트하고 싶습니다.
더 많은 컨텍스트가 필요합니다. 그래서 믹스에 MOQ를 추가 여기에 1 점을 추가하는 듯합니다 :
코뿔소 모의 객체에서pubilc class Calc {
public int DoubleIt(string a) {
return ToInt(a)*2;
}
public virtual int ToInt(string s) {
return int.Parse(s);
}
}
// The test:
var mock = new Mock<Calc>();
string parameterPassed = null;
mock.Setup(c => x.ToInt(It.Is.Any<int>())).Returns(3).Callback(s => parameterPassed = s);
mock.Object.DoubleIt("3");
Assert.AreEqual("3", parameterPassed);
Typemock 또는 Rhino Mocks 또는 NMocks2과 같은 일부 조롱 프레임 워크를 사용해야합니다.
NUnit에도 Nunit.Mock이 있지만 잘 알려지지 않았습니다.
MOQ의 구문은 here 찾을 수 있습니다 또한
var mock = new Mock<ILoveThisFramework>();
// WOW! No record/reply weirdness?! :)
mock.Setup(framework => framework.DownloadExists("2.0.0.0"))
.Returns(true)
.AtMostOnce();
// Hand mock.Object as a collaborator and exercise it,
// like calling methods on it...
ILoveThisFramework lovable = mock.Object;
bool download = lovable.DownloadExists("2.0.0.0");
// Verify that the given method was indeed called with the expected value
mock.Verify(framework => framework.DownloadExists("2.0.0.0"));
, System.IO.File
에서 객체가 인터페이스가없는, 그래서 만약 당신이 단지, 인터페이스을 조롱 할 수 있습니다는 아마 당신은 '수 할. 당신은 자신의 커스텀 클래스 안에서 System.IO.File
으로 전화를 걸어야합니다.
NUnit은 테스트를 실행하며 조롱이나 검증을하지 않습니다. 다른 책임. Moq를 사용하지는 않았지만 mock 객체에 대한 기대치를 확인할 수 있어야합니다. – kyoryu
네가 틀린 곳을보고 있었다 ... 나는 너를보고 있었다. 지금 나는 moq을보고있다. :) –
MOQ를 사용하면 추상 수업을 조롱 할 수도 있습니다. –
인터페이스 용 모의를 사용합니다.
인터페이스 Finder
을 사용하는 클래스 ImplClass
이 있고 "hello"인수로 Search
함수가 호출되도록하려는 경우,
FinderMock mock = new FinderMock("hello");
ImplClass impl = new ImplClass(mock);
impl.doStuff();
Assert.AreEqual(1, mock.numTimesCalled);
:
public interface Finder
{
public string Search(string arg);
}
다음
public class ImplClass
{
public ImplClass(Finder finder)
{
...
}
public void doStuff();
}
당신이 당신의 테스트 코드
private class FinderMock : Finder
{
public int numTimesCalled = 0;
string expected;
public FinderMock(string expected)
{
this.expected = expected;
}
public string Search(string arg)
{
numTimesCalled++;
Assert.AreEqual(expected, arg);
}
}
다음 테스트 코드에 대한 모의를 쓸 수 있습니다
여기
AssertWasCalled
라는 방법입니다 것은var mailDeliveryManager = MockRepository.GenerateMock<IMailDeliveryManager>();
var mailHandler = new PlannedSending.Business.Handlers.MailHandler(mailDeliveryManager);
mailHandler.NotifyPrinting(User, Info);
mailDeliveryManager.AssertWasCalled(x => x.SendMailMessage(null, null, null), o => o.IgnoreArguments());
Calc가 추상 또는 인터페이스가 아닌 경우이 기능이 작동합니까? 내가 아는 한'Moq'은 동적 인 프록시를 만들어서 새로운 일리노이 명령을 생성 할 수 없도록 만든다. – kuskmen