2017-03-17 3 views
0

단위 테스트에서 조롱 된 TList<T>을 설정할 필요가 있습니다. 조롱 된 TList<T>.count 속성에 대한 반환 값을 설정하려면 어떻게해야합니까? 내가 Whencount를 사용하는 경우TList <T> 델타 모의로 계산 된 반환 값 mocking

컴파일러 오류 메시지는 다음과 같습니다

[dcc32 Error] Unit1.pas(40): E2014 Statement expected, but expression of type 'Integer' found 

내가 When 컴파일러 오류 메시지가 후 getCount를 사용하면된다

[dcc32 Error] Unit1.pas(40): E2003 Undeclared identifier: 'getCount' 

count 속성은 직접 fCount의 속성을 읽어 들여, . 어떤 해결책이 있습니까?

type 
    TMyClass = class 
    end; 

procedure TXXXTestCase.testYYY; 
var 
    mL : TMock<TList<TMyClass>>; 
begin 
    mL := TMock<TList<TMyClass>>.create; 
    try 
    // ... 
    mL.Setup.WillReturn(1).When.Count; 
    // ... 
    finally 
    mL.Free; 
    end; 
end; 
+0

낮은 수준의 후킹을 사용하지 않는 한, 'Count'값을 조롱하는 유일한 방법은 더미 값을 목록에 추가하는 것입니다. 'When'에 관해서는, Mock은 가상 getter 메소드를 사용하는 속성 읽기 만 처리 할 수 ​​있습니다 (그래서 메소드를 연결할 수 있습니다). 게다가, MyList.Count;와 같은 명령문은 델파이에서 유효하지 않습니다 (같은 컴파일러 오류). Mocks와 호환되는 다른 클래스/메소드에서'Count' 체크를 래핑해야합니다. –

+0

예 제 생각은 같습니다 : 상속 된 TList를 getCount 가상 메서드로 사용하거나 함수 getListCount (aL_ : TList )를 만드는 것 : integer begin aL_.count; 종료; 메소드를 호출합니다. 모두 해킹하고 있습니다. 코드를 리팩터링하여 테스트 할 수 있습니다. 그러나 올바른 방향으로는 아닙니다. : –

+0

목록을 조롱하는 것은 좋지 않은 생각입니다. 포함하려는 값을 넣으십시오. –

답변

0

확인. Stefan Glinke의 코멘트에서 영감을 얻은 필자는 조롱 된 객체의 속성에 대한 퍼 퍼티에 액세스하지 못하도록 유틸리티를 만들었습니다. 나는 가짜 값을 얻기 위해 유틸리티 클래스의 모의 객체에 모의 객체를 전달한다.

코드 snipet 내 원래 다음과 같습니다

value = object1.property.list.count; 

이 깊은 내부 모습에 대한 해결책 :

value = object1Utility.getListCount(object); 

가 TObjec1tUtility는 응답에 Object2Utility를 호출하지만이 경우에는 내가 조롱 수 Object1Utility, 모의 객체를 모의 객체에 추가 할 필요가 없습니다.