2015-08-18 6 views
6

Wie erzwinge ich, dass AutoFixture mit AutoConfiguredMoqCustomization konfiguriert wurde, um Schnittstellen und seine schreibgeschützten Eigenschaften automatisch zu testen?AutoConfiguredMoqCustomization und nicht setzbare Eigenschaften

Um die Dinge klar zu machen, nehmen wir an, ich eine solche Schnittstelle haben:

public interface A { 
    int Property {get;} 
} 

und solche Klasse:

public class SomeClass { 
    public SomeClass(A dependency) {} 
} 

Was ich war, ist dependency einer Schein gelöst zu haben, etwas zurück in dependency.Property:

var fixture = new Fixture().Customize(new AutoConfiguredMoqCustomization()); 
var sut = fixture.Create<SomeClass>(); // <- dependency passed to SomeClass' constructor will have .Property returning null 
+1

Ich kann dies nur reproduzieren mit der neuesten Version von Moq - versuchen Version installieren '4.1.1308.2120 'stattdessen:' install-package Moq -Version 4.1.1308.2120'. – dcastro

Antwort

5

Das ist aufgrund eines Fehlers i Einführung in Moq 4.2.1502.911, wobei SetupAllProperties frühere Einstellungen überschreibt, die für Nur-Get-Eigenschaften ausgeführt werden.

Hier ist ein einfacher Repro:

public interface Interface 
{ 
    string Property { get; } 
} 

var a = new Mock<Interface>(); 

a.Setup(x => x.Property).Returns("test"); 
a.SetupAllProperties(); 

Assert.NotNull(a.Object.Property); 

Dies ist eine Art, was AutoFixture tut hinter den Kulissen eine Instanz von Interface zu erstellen. Dieser Test schlägt mit Versionen von Moq, die gleich oder größer als 4.2.1502.911 sind, fehl, geht aber mit niedrigeren Versionen über.

Führen Sie einfach diese auf dem Package Manager Console:

install-package Moq -version 4.2.1409.1722 

Dieser Fehler hier verfolgt wird: https://github.com/Moq/moq4/issues/196

+1

+1 Es ist vielleicht erwähnenswert, dass wir das Problem auch in AutoFixture selbst verfolgen: https://github.com/AutoFixture/AutoFixture/issues/434 –

+0

Vielen Dank für Ihre Hilfe. Ich hatte noch keine Zeit, Ihre Problemumgehung zu versuchen. Ich änderte die Eigenschaften, um einstellbar zu sein, und es funktionierte gut. – SOReader