2016-05-04 4 views
0

Ich entwickle ein ASP.NET MVC-Projekt. Ich mache Komponententests für jede Komponente. Ich benutze Moq, um meine Repositories zu verspotten. Aber ich habe ein Problem damit, eine Funktion zu verspotten. Bitte sehen Sie mein Szenario unten.Wie Wert der Parameter von Renditen von Mock in Moq in ASP.NET MVC-Komponententest abgerufen werden

Dies ist meine Test-Methode:

[TestMethod] 
public void Cannot_Edit_If_Invalid_Region() 
{ 
     Region[] regions = { 
          new Region{ 
            Id = 1, 
            Name = "Test 1" 
          }, 
           new Region{ 
            Id = 3, 
            Name = "Test 3" 
           }, 
           new Region{ 
            Id = 4, 
            Name = "Test 4" 
           } 
          }; 

    Mock<IRegionRepo> mock = new Mock<IRegionRepo>(); 
    mock.Setup(m=>m.Region(It.IsAny<int>())).Returns(regions[It.IsAny<int>()]); // problem is here 
} 

Wie Sie im obigen Code sehen können, bemerkte ich, wo das Problem ist. Eigentlich, wie ich es nachahmen möchte, übergebe ich einen Parameter zur Funktion, dann wird eine der Regionen durch einen Parameter zurückerhalten, der an die Funktion übergeben wird, die als Index des Arrays verwendet wird.

Das ist eine Idee von dem, was ich will:

mock.Setup(m=>m.Region("parameter passed").Returns(regions["parameter passed"]); 

Wie kann ich abrufen die Parameter auf Mock-Funktion von Renditen geführt?

Antwort

1

Eine mögliche Lösung finden Sie unter here.
Im Grunde können Sie einfach einen Lambda-Ausdruck innerhalb Ihrer Returns-Funktion verwenden und die "Any" -Parameter angeben. Wie folgt aus:

mock.Setup(m=>m.Region(It.IsAny<int>())).Returns((int x) => regions[x]); 
1

Etwas wie folgt aus:

Region[] regions = { 
        new Region{ 
         Id = 1, 
         Name = "Test 1" 
        }, 
        new Region{ 
         Id = 3, 
         Name = "Test 3" 
        }, 
        new Region{ 
         Id = 4, 
         Name = "Test 4" 
        } 
       }; 
Mock<IRegionRepo> mock = new Mock<IRegionRepo>(); 
mock.Setup(x => x.Region(It.IsAny<int>())).Returns<int>((i) => regions[i]); 

Assert.AreEqual(mock.Object.Region(1), regions[1]); 
Verwandte Themen