문제

나는 조롱에 익숙하지 않기 때문에 이것은 아직 집어지지 않는 것일 수 있지만 어디에서나 좋은 예를 찾을 수 없습니다.

기본적으로 추상 클래스에서 상속되는 클래스는 생성자의 컬렉션을 인스턴스화 할 것이라고 주장하려고합니다. 추상 수업은 다음과 같습니다.

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 가상을 만들어보십시오

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top