2017-07-19 2 views
0

ich bei der Arbeit bin hier :)Wie EF verspotten mit NSubstitute

Ich habe bei der Erstellung eines Testskript beauftragt worden, die, falls vorhanden wird Nachschau Wert in einer Tabelle (Entity Framework).

Der Code, mit dem ich arbeiten hat diesen Konstruktor:

public PostProductHelper(
    Func<IMachineDBContext> contextFactory) 
{ 
    _contextFactory = contextFactory; 
} 

Meine Methode, so etwas zu Unit-Test sein könnte:

public string CheckAndRemoveProductNameFileExtIfExists(
    string productName) 
{ 
    using (var ctx = CreateContext()) 
    { 
     return ctx.Products.FirstOrDefault(d => d.Name == productName); 
    } 
} 

so, durch die Beispiele gehen, wenn Googeln ich bin soll das tun:

Aber um zu meinem Konstruktor zu gelangen, muss ich dies ändern zu:

MockProductRepository = Substitute.For<IProductRepository>(); 
MockMessagePublicationService = Substitute.For<IMessagePublicationService>(); 
MockMachineDBContext = Substitute.For<Func<IMachineDBContext>>(); 

var Products = new List<Product> 
{ 
    new Product { Name = "BBB" }, 
    new Product { Name = "ZZZ" }, 
    new Product { Name = "AAA" }, 
}.AsQueryable(); 

MockMachineDBContext.Products.AddRange(Products); 

Welche Fehler in der letzten Zeile sagen 'kann Symbol' Produkte 'nicht auflösen.

Ich bin nicht erlaubt, diesen Konstruktor zu ändern, und ich weiß, dass ich einige richtige 'Heuler' tun kann, und ich bin im Moment noch googelnd, würde aber niemandem Hilfe auch schätzen.

Dank

Antwort

2

Sie fehlen() nach MockMachineDBContext in MockMachineDBContext().Products.AddRange(Products);

MockMachineDBContext ist Delegierter. Zur Verwendung siehe auch Substituting for delegates in NSubstitute.

+0

so einfach! Vielen Dank! –

Verwandte Themen