다른 함수에서 호출 된 함수의 결과를 조롱하거나 패닉시킬 수 있습니까? 보통 Test2는 실제 데이터를 가져 오지 않는 DataAccess 메소드입니다. unittest에서 테스트하는 것이 비즈니스 논리입니다.FakeItEasy로 메소드 내의 메소드 조롱
이것은 내가 지금 가지고 있지만 전혀 작동하지 않는 것입니다. 합은 항상 5로 단정됩니다!
public int Test1()
{
var value = this.Test2(); //Unittest should substitute with 5
var businesslogic = value + 10; //The business logic
return businesslogic;
}
public int Test2()
{
return 10; //I try to mock this value away in the test. Don´t go here!
}
그런 다음 "비즈니스 로직"에서 실행하고 싶은 Unittest가 있습니다.
[TestMethod()]
public void TestToTest()
{
//Arrange
var instance = A.Fake<IClassWithMethods>();
//Make calling Test2 return 5 and not 10.
A.CallTo(() => instance.Test2()).Returns(5);
//Call the method
var sum = instance.Test1();
//Assert if the business logic in the method works.
Assert.AreEqual(15, sum);
}
멋진 대답을. 첫 번째 질문에 대답하기 위해 질문에 내 코드를 수정했습니다. 하지만 관계없이이 정확한 예제에서 무엇을 진짜로하려고하는 것은 거기에 호출되는 다른 메서드를 호출하지 않고 메서드에서 논리를 테스트 할 수있게하는 것입니다. 만약 내가 Test2에서 데이터베이스에 몇 가지 삽입했다 나는 그것을 부르고 싶지 않다. 메서드를하지만 "값 + 10"메서드의 비즈니스 논리를 테스트 할 수 싶습니다. 나는 가상 솔루션이 마음에 들지 않는다는 것에 동의한다. – Sturla
어떤 방법을 바꾸고 싶지 않다면 원하는 테스트를 어떻게 수행 할 수 있는지 보지 못합니다. my와 Tseng의 제안은 Tseng의 코드가 좀 더 극적 (그리고 우월하다고 생각합니다.)으로 코드를 수정해야합니다. 나는 당신이 [TypeMock Isolator] (http://www.typemock.com/isolator-product-page) 또는 [Microsoft Fakes] (http://msdn.microsoft.com/ko/)와 같은 조롱 프레임 워크를 사용해야 할 것이라고 생각합니다. -us/library/hh549175 (v = vs.110) .aspx)를 수정해야합니다. –
대단히 감사합니다. Microsoft Fakes는 제가 찾고 있던 것입니다. 여기에 그것을 사용하기 시작하는 훌륭한 링크 http://www.codeproject.com/Articles/582812/Unit-testing-with-Fakes-with-Visual-studio-Premium – Sturla