나는이 팩토리 클래스를 가지고 있으며 올바르게 테스트하려고합니다. 나는 많은 자식 (상속)을 가진 추상 클래스를 가지고 있다고 가정 해 보겠습니다.모의 정적 메서드 Activator.CreateInstance 다른 클래스의 모의를 반환합니다
제 Factory 클래스에서 BuildChild 메소드에서 볼 수 있듯이 런타임에 하위 클래스의 인스턴스를 만들 수 있기를 원합니다. 런타임 전에 유형을 알 수 없기 때문에 런타임 중에이 인스턴스를 작성할 수 있어야합니다. 그리고이 프로젝트에 Unity를 사용할 수는 없습니다 (그렇다면이 방법을 묻지 않습니다).
public class Factory
{
public AnAbstractClass BuildChild(Type childType, object parameter)
{
AnAbstractClass child = (AnAbstractClass) Activator.CreateInstance(childType);
child.Initialize(parameter);
return child;
}
}
가 나는 자식 클래스 내 자신의 조롱 개체를 반환하는 모의 Activator.CreateInstance로 할 수있는 방법을 찾으려면,이 테스트하려면 :
는 여기에 테스트 할 내 공장 클래스입니다. 이것을 어떻게 할 수 있습니까? 또는 Activator.CreateInstance (및 Unity)를 사용하지 않고이 작업을 수행 할 수있는 더 좋은 방법이 있다면 테스트하고 조롱하기가 더 쉽습니다.
현재 내 모의 객체를 만드는 데 Moq을 사용하고 있지만 Activator.CreateInstance는 정적 클래스의 정적 메소드이므로이 작업을 수행하는 방법을 알 수 없습니다. Moq가 모의 인스턴스를 만들 수 있다는 것을 이미 알고 있습니다. 사물).
나는 마이크로 소프트에서 Fakes를 보았지만 성공하지는 못했습니다. (어떻게 작동하는지 이해하고 잘 설명 된 예제를 찾는 데 어려움이있었습니다.)
도와주세요!
편집 :
나는 또 다른 조롱 개체를 반환이 방법을 강제로 원하기 때문에 Activator.CreateInstance로 조롱 할 필요가. 내가 원하는 올바른 방법은이 방법을 스터핑하는 것뿐입니다 (조롱하지 않기).
그래서 나는이 같은 위해 buildChild 테스트 할 때 : 유형 및 매개 변수를 사용하여 호출
[TestMethod]
public void TestBuildChild()
{
var mockChildClass = new Mock(AChildClass);
// TODO: Stub/Mock Activator.CreateInstance to return mockChildClass when called with "type" and "parameter" as follow.
var type = typeof(AChildClass);
var parameter = "A parameter";
var child = this._factory.BuildChild(type, parameters);
}
Activator.CreateInstance로 대신 실제 아이 클래스의 새 인스턴스를 만드는 내 조롱 객체를 반환합니다 (아직 구현되지 않음).
신뢰할 수 있어야한다고 말하면 조롱 할 수 있습니다. 따라서 조롱 할 필요가 없습니다. 나는 왜 내가이 수업을 조롱 할 필요가 있는지 설명하기 위해 나의 글을 편집한다. – Jeep87c
@ Jeep87c 그래서 나는 이것에 대한 해결책을 제시했다. 당신이 더 강력한 프레임 워크에 들어가기를 원하지 않는다면 ...하지만 그것들은 나쁜 OO 행동을 조장합니다. –
오, 미안합니다. 내가 편집하는 동안 당신은 아마 당신의 글을 편집했을 것입니다. 이 해결 방법에 대해 신경 쓰지 말고 감사드립니다. 당신이 말한 이유 때문에 더 강력한 프레임 워크를 사용하고 싶지 않습니다. – Jeep87c