Rhino와의 모의 초록 클래스 기본 동작
-
05-07-2019 - |
문제
나는 조롱에 익숙하지 않기 때문에 이것은 아직 집어지지 않는 것일 수 있지만 어디에서나 좋은 예를 찾을 수 없습니다.
기본적으로 추상 클래스에서 상속되는 클래스는 생성자의 컬렉션을 인스턴스화 할 것이라고 주장하려고합니다. 추상 수업은 다음과 같습니다.
public abstract class DataCollectionWorkflow : SequentialWorkflowActivity
{
private readonly DataSet _output = new DataSet();
private List<DataCollectionParameter> _params = null;
public DataCollectionWorkflow()
{
_params = new List<DataCollectionParameter>();
}
public virtual IList<DataCollectionParameter> Parameters
{
get { return _params; }
set { _params = (List<DataCollectionParameter>)value; }
}
}
Rhino와 함께 어떻게 조롱합니까? 내가한다면 GenerateMock<DataCollectionWorkflow>
(또는 스텁), 생성자가 실행되고 모의 개인 필드 "_params
"초기화되지만 모의"Parameters
"속성은 단순히 널입니다.
분명히 생성 된 모의 서브 클래스는 속성 구현을 무시하고 있습니다. 매개 변수 속성을 다시 구현하는 것을 배제하는 방법이 있습니까?
감사.
해결책
좋아, 나는 그것을 알아 냈다. Rhino의 복잡성에 대한 또 다른 사상자로 나를 분필하십시오. 이런 종류의 일로 인해 더 간단한 프레임 워크로 이동하고 싶을 것입니다. 아마도 MOQ를 확인하겠습니다.
따라서 대답은 부분 모형을 사용하는 것입니다. 나는 부분적인 모의를 생성하는 데 간단히 놀았지만 디버거를 실행했을 때 속성이 널이 아니며 이상한 예외를 던지는 것을 알았 기 때문에 훨씬 더 깊어 보이지 않았습니다. 짧은 양식 AAA 유형의 구문을 사용하고있었습니다.
단순히 모의를 재생 모드에 넣으면 테스트가 작동합니다. 속성은 그대로 사용됩니다 (부분 모의와 함께해야 함).
그래서 여기에 답이 있습니다.
[Test]
public void ShouldCreateParameterListInConstructor()
{
var mockRepository = new MockRepository();
var mock = mockRepository.PartialMock<DataCollectionWorkflow>();
using ( mockRepository.Record() )
{
}
using (mockRepository.Playback())
{
Assert.That(mock.Parameters, Is.Not.Null, "DataCollectionWorkflow base class didn't create new param collection");
}
}
나는 이것이 진정한 시험이라는 것을 알고 있지만 실제로는 문제의 속성과 관련된 일부 행동 테스트의 간단한 전주국 이므로이 사건을 전제 조건으로 원했습니다. 그것이 누군가를 돕기를 바랍니다.
다른 팁
_Params 가상을 만들어보십시오