Bitte beachten Sie, ich bin etwas neu zu TDD, so werde ich allgemeine Ratschläge sowie spezifische Antwort nehmen.funktioniert AutoMoqCustomization für abstrakte Klassen?
Weder abstrakte Klassen noch Schnittstellen können instanziiert werden. Offensichtlich kann Moq mir eine gespottete Instanz des ADataFeed im zweiten Test geben. Warum funktioniert AutoMoqCustomization für die Schnittstellen IDataFeed
, aber nicht für die abstrakten Klassen ADataFeed
, sondern durch eine InvalidOperationException?
Zweitens, was wäre der AutoFixture-Ansatz (oder TDD im Allgemeinen), ein Design zu fahren, das eine abstrakte Klasse mit einem Konstruktor erfordern könnte, um bestimmte Werte zu verlangen und zu garantieren, wie zum Beispiel eine Verbindungszeichenfolge?
'AutoMoqCustomization' kann sowohl abstrakte Basisklassen als auch Schnittstellen bereitstellen. Ist der Konstruktor von 'ADataFeed' öffentlich? Wenn ja, schütze es. Es ist ein Designfehler mit einem öffentlichen Konstruktor auf einer abstrakten Klasse –
sehr interessant. Ok, moq handhabt einen öffentlichen Konstruktor für die abstrakte Klasse ... autofixture nicht. Weder arbeiten mit einem privaten Konstruktor und beide arbeiten, wenn es geschützt ist. Ich nehme dein Wort dafür, dass es ein Designfehler ist ... eine andere Frage für einen anderen Tag. In der Zwischenzeit werde ich geschützt verwenden. – cocogorilla
FTR: http://msdn.microsoft.com/en-us/library/vstudio/ms229047(v=vs.100).aspx –