2012-07-18 10 views
17

(Come indicato dai tag, Sto usando moq).Come deridere una proprietà readonly il cui valore dipende da un'altra proprietà di Mock

Ho un interfaccia come questa:

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

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

Nella mia applicazione, casi concreti di IExample accettare un DTO (IDataTransferObject) come sorgente. Alcune proprietà sull'implementazione concreta di IExample sono semplicemente delegate alla Sorgente. Ti piace questa ...

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

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

vorrei creare una finta autonoma di IExample (significato autonomo che non posso utilizzare una variabile catturato perché diverse istanze del finto IExample saranno creati nel corso di un test) e configurare il Mock in modo tale che IExample.Name restituisca il valore di IExample.Source.Name. Quindi, vorrei creare un qualcosa di finto come questo:

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); 

In sostanza, voglio configurare il mock di tornare, come il valore di una proprietà, il valore di una proprietà di un oggetto secondario del finto.

Grazie.

risposta

28

Si potrebbe forse usare:

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

Il valore deve essere restituito sarà poi determinata quando la proprietà si accede, e sarà tolto Name di proprietà dei beni del finto Source.

+0

Questo fa esattamente quello che voglio. Non mi è mai venuto in mente di acquisire la variabile locale che è il Mock a cui voglio fare riferimento per ottenere il valore sottostante. Mi fa male al cervello. – wageoghe

Problemi correlati