문제

나는 데이터 액세스 개체 TransactionDao.를 호출할 때 TransactionDao.저장(트랜잭션이)나는 그것을 설정하는 트랜잭션이 있습니다.IsSaved=true 플래그(이것은 단순 실제적인 것은 내가 하려는 아주 평범한).그래서 때 조롱하는 내 TransactionDao 와 RhinoMocks 할 수 있는 방법을 나타내는 변환 입력?

이상적으로 작성하고 싶은 무언가 이것을 좋아한다:

Expect.Call(delegate {dao.Save(transaction);}).Override(x => x.IsSaved=true);

가 누구나 알고 어떻게 하면 이렇게 할 수 있습니까?


하지만 나는 힌트는 그것을 어떻게 대답에서 지정된 아래제 유형 서명은,당신을 다음과 같은 것이 가능합니다.무엇 때문에 표시 Ingram 게시는 것이 가장 좋아에 대답하지만,누구의 명시적으로 말했다 그것은 이렇게하려면:

public delegate void FakeSave(Transaction t);
...
Expect.Call(delegate {dao.Save(t); }).Do( new FakeSave(delegate(Transaction t2) { t.IsSaved = true; }));
도움이 되었습니까?

해결책

계곡,

가장 간단한 솔루션을 찾을 적용하여 귀하의 질문은 다음과 같다:

Expect.Call(() => dao.Save(transaction))
    .Do(new Action<Transaction>(x => x.IsSaved = true));

그래서 당신을 만들 필요가 없는 특별한 대리인이나 다른 아무것도.사용 작업에 표준입니다.NET3.5 라이브러리입니다.

희망이 도움이됩니다.Frantisek

다른 팁

당신은 이것을 달성할 수 있을 사용하여 수행 callback:

Expect.Call(delegate {dao.Save(transaction);})
    .Do(x => x.IsSaved = true);

당신이해야 하는 모의 트랜잭션이고 그것을 만들 true 를 반환 fo IsSaved 할 수 있는 경우,모의 트랜잭션의 물론입니다.

ITransaction transaction = _Mocker.dynamicMock<ITransaction>;
Expect.Call(transaction.IsSaved).IgnoreArguments.Return(true);
_mocker.ReplayAll();
dao.Save(transaction);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top