클래스가 있습니다. 내가 단위 테스트를하고 있기 때문에 공용 설정자가이 속성에서 호출되는지 확인하는 것이 좋습니다. 이 작업을 수행하는 방법에 대한 아이디어가 있습니까?해당 속성 setter가 호출되었는지 확인하십시오.
값이 호출되었음을 입증했는지 확인하고 싶지 않습니다. 난 단지 생성자가 공용 설정기를 사용하고 있는지 확인하기를 원합니다. 이 속성 데이터 형식은 기본 문자열입니다.
클래스가 있습니다. 내가 단위 테스트를하고 있기 때문에 공용 설정자가이 속성에서 호출되는지 확인하는 것이 좋습니다. 이 작업을 수행하는 방법에 대한 아이디어가 있습니까?해당 속성 setter가 호출되었는지 확인하십시오.
값이 호출되었음을 입증했는지 확인하고 싶지 않습니다. 난 단지 생성자가 공용 설정기를 사용하고 있는지 확인하기를 원합니다. 이 속성 데이터 형식은 기본 문자열입니다.
이것은 구현 세부 사항을 테스트하려고하기 때문에 조롱이 의도 된 일종의 시나리오가 아닙니다. 이 속성이 원래의 클래스가 인터페이스를 통해 액세스 다른 클래스에 있었다면 지금, 당신은 그 인터페이스를 조롱하고 IgnoreArguments
구문 기대 설정합니다 :
public interface IMyInterface
{
string MyString { get; set; }
}
public class MyClass
{
public MyClass(IMyInterface argument)
{
argument.MyString = "foo";
}
}
[TestClass]
public class Tests
{
[TestMethod]
public void Test()
{
var mock = MockRepository.GenerateMock<IMyInterface>();
mock.Expect(m => m.MyString = "anything").IgnoreArguments();
new MyClass(mock);
mock.VerifyAllExpectations();
}
}
은 당신이 뭘 하려는지 2 문제가 있습니다를 . 첫 번째는 구체적인 클래스를 모의하려고하기 때문에 속성이 가상 인 경우에만 기대치를 설정할 수 있습니다.
두 번째 문제점은 테스트하려는 이벤트가 생성자에서 발생하므로 모의 객체를 만들 때 발생하므로 기대를 설정하기 전에 발생한다는 것입니다.
하면 클래스는 봉인하고, 속성을 사용하면 같은이 함께 테스트하기 위해 자신의 파생 클래스를 생성하여 모의 객체없이 테스트 할 수 있습니다, 가상하지 않은 경우 :
public class RealClass
{
public virtual string RealString { get; set; }
public RealClass()
{
RealString = "blah";
}
}
[TestClass]
public class Tests
{
private class MockClass : RealClass
{
public bool WasStringSet;
public override string RealString
{
set { WasStringSet = true; }
}
}
[TestMethod]
public void Test()
{
MockClass mockClass = new MockClass();
Assert.IsTrue(mockClass.WasStringSet);
}
}