Podczas kpiny z mojego ApplictionDbContext
dostałem błąd w metodzie AddOrUpdate
.Nie można wywołać metody publicznej instancji AddOrUpdate, kpinając
DbSet
w kontekście jest wirtualny.
ramach metody badawczej:
this.db.ExpensesDocuments.AddOrUpdate(doc);
Moja metoda testowania:
[Fact]
public void AddOrUpdateExpenses_Success()
{
// arrange
var mockSet = new Mock<DbSet<ExpensesDocument>>();
var mockContext = new Mock<ApplicationDbContext>();
mockContext.Setup(m => m.ExpensesDocuments).Returns(mockSet.Object);
var provider = new ExpensesProvider(mockContext.Object);
// act
bool result = provider.AddOrUpdateExpenses(new ExpensesDocument());
// assert
}
Błąd:
Result Message: System.InvalidOperationException : Unable to call public, instance method AddOrUpdate on derived IDbSet type 'Castle.Proxies.DbSet`1Proxy'. Method not found.
Używam Moq4
ramy dla wyśmianie i xUnit
do testów.
Wygląda na to, że nie ustawiłeś tej metody tak daleko, jak pokazuje twój kod. Czy to możliwe? – Chris
'AddOrUpdate' jest metodą rozszerzenia, a nie metodą' DbSet'. Zobacz https://msdn.microsoft.com/en-us/library/hh846520(v=vs.103).aspx Nie można tego przechwycić w ten sposób. Spróbuj przepisać test ponownie. –
Czy wiem, że to metoda rozszerzenia, ale jak mogę sobie z tym poradzić? – Nerf