2015-07-10 15 views
5

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.

+0

Wygląda na to, że nie ustawiłeś tej metody tak daleko, jak pokazuje twój kod. Czy to możliwe? – Chris

+0

'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. –

+0

Czy wiem, że to metoda rozszerzenia, ale jak mogę sobie z tym poradzić? – Nerf

Odpowiedz

5

Metoda rozszerzenie AddOrUpdate jest opisana tak:.

„. Dodaje lub aktualizuje podmioty przez klucz, gdy SaveChanges nazywany jest równoważny z«upsert»pracy z terminologii baz danych Ta metoda może przydatna przy siewie danych przy użyciu migracje. "

Znalazłem, próbując drwić z tego, że faktycznie używałem go całkowicie źle. Trochę o "pożytecznym przy wysiewie" sprawiło, że pomyślałem. Nie trzeba wywoływać tego, aby zaktualizować obiekt encji. SaveChanges() wykonuje sztuczkę, o ile otrzymałeś obiekt z kontekstu.

Prawdopodobnie nie jest to odpowiedź, na którą liczyłeś (i spóźnienie o 6 miesięcy), ale może ktoś inny ponownie rozważy zastosowanie tej metody.

Powiązane problemy