2012-07-18 14 views
17

(Jak wskazują tagi, używam moq).Jak wyśmiać właściwość tylko do odczytu, której wartość zależy od innej właściwości makiety

Mam interfejs tak:

interface ISource 
{ 
    string Name { get; set; } 
    int Id { get; set; } 
} 

interface IExample 
{ 
    string Name { get; } 
    ISource Source { get; set; } 
} 

W mojej aplikacji, konkretne przypadki IExample zaakceptować DTO (IDataTransferObject) jako źródło. Niektóre właściwości dotyczące konkretnej implementacji IExample są po prostu przekazywane do źródła. Tak ...

class Example : IExample 
{ 
    IDataTransferObject Source { get; set; } 

    string Name { get { return _data.Name; } } 
} 

Chciałbym stworzyć autonomiczną próbną IExample (autonomicznego znaczenia, że ​​nie mogę użyć zmiennej przechwycony ponieważ kilka wystąpień mock IExample zostanie utworzony w trakcie testu) i ustaw makietę tak, że IExample.Name zwraca wartość IExample.Source.Name. Tak, chciałbym stworzyć makietę coś takiego:

var example = new Mock<IExample>(); 
example.SetupProperty(ex => ex.Source); 
example.SetupGet(ex => ex.Name).Returns(what can I put here to return ex.Source.Name); 

Zasadniczo, chcę skonfigurować makiety do powrotu, jako wartość jednej nieruchomości, wartość nieruchomości o podobiektu z mock.

Dzięki.

Odpowiedz

28

Można chyba użyć:

example.SetupGet(ex => ex.Name).Returns(() => example.Object.Source.Name); 

Wartość zostać zwrócone zostanie ustalona, ​​gdy nieruchomość jest dostępny i zostanie pobrana z Name własność Mock za Source nieruchomości.

+0

Dokładnie to, czego chcę. Nigdy nie przyszło mi do głowy, aby uchwycić lokalną zmienną, którą jest Mock, do której chcę się odwołać, aby uzyskać podstawową wartość. To sprawia, że ​​mój mózg boli. – wageoghe

Powiązane problemy