2012-12-14 15 views
6

Si prega di notare, sono un po 'nuovo a TDD, quindi prendo consiglio generale e risposta specifica.AutoMoqCustomization funziona per classi astratte?

Né le classi astratte né le interfacce possono essere istanziate. Chiaramente Moq può darmi un'istanza di prova dell'ADataFeed nel secondo test. Perché AutoMoqCustomization funziona per le interfacce IDataFeed ma non per le classi astratte ADataFeed, invece di un'eccezione InvalidOperationException?

In secondo luogo, quale sarebbe l'approccio AutoFixture (o TDD in generale) per guidare un progetto che potrebbe richiedere una classe astratta con un costruttore per richiedere e garantire determinati valori, come una stringa di connessione in questo caso?

[Theory, AutoMoqData] 
public void AllDataFeedsHaveAConectionString(
    IDataFeed sut) 
{ 
    var result = sut.GetConnectionString(); 
    Assert.Null(result); 
} 

[Fact] 
public void AllDataFeedsRequireAConnectionString() 
{ 
    var expected = Guid.NewGuid().ToString(); 
    var sut = new Mock<ADataFeed>(expected); 
    var result = sut.Object.GetConnectionString(); 
    Assert.Equal(expected, result); 
} 

[Theory, AutoMoqData] 
public void AllDataFeedsRequireAConnectionString2(
    [Frozen] string expected, 
    ADataFeed sut) 
{ 
    var result = sut.GetConnectionString(); 
    Assert.Equal(expected, result); 
} 
+4

'AutoMoqCustomization' può fornire classi di base astratte e interfacce. Il costruttore di 'ADataFeed' è pubblico? Se è così, rendilo protetto. È un errore di progettazione con un costruttore pubblico su una classe astratta –

+0

MOLTO interessante. Ok, moq gestisce un costruttore pubblico su una classe astratta ... autofixture no. Né lavorare con un costruttore privato ed entrambi funzionano quando è protetto. Prenderò la tua parola per questo che si tratta di un errore di progettazione ... un'altra domanda per un altro giorno. Nel frattempo userò protetto. – cocogorilla

+0

FTR: http://msdn.microsoft.com/en-us/library/vstudio/ms229047(v=vs.100).aspx –

risposta

1

Le classi astratte con costruttori devono essere contrassegnate come protette. AutoFixture non programma contro classi astratte quando il costruttore è contrassegnato come pubblico, in quanto si tratta di un errore di progettazione.

Problemi correlati