System.NotSupportedException: es wurde ein Ungültiger setup auf einem non-virtual (overridable in VB) Mitglied
Ich bin immer eine NotSupportedException-Fehlermeldung auf meinem Unit-Test mit Moq
System.NotSupportedException: es wurde ein Ungültiger setup auf einem non-virtual (overridable in VB) Mitglied
Unit-Test-Code:
[TestMethod]
public void TestEmailNotSentOut()
{
//...
var dataAccess = new Mock<TjiContext>();
var mockSetStock = new Mock<DbSet<Stock>>();
mockSetStock.As<IQueryable<Stock>>().Setup(m => m.Provider).Returns(stockList.Provider);
mockSetStock.As<IQueryable<Stock>>().Setup(m => m.Expression).Returns(stockList.Expression);
mockSetStock.As<IQueryable<Stock>>().Setup(m => m.ElementType).Returns(stockList.ElementType);
mockSetStock.As<IQueryable<Stock>>().Setup(m => m.GetEnumerator()).Returns(stockList.GetEnumerator());
dataAccess.Setup(m => m.Stocks).Returns(mockSetStock.Object);
Einen Vorschlag, dieser Beitrag sagt zu markieren es als virtual
, aber ich bin mir nicht sicher, was muss markiert werden, die als virtuelle?
Den Fehler geschieht in dieser Zeile:
dataAccess.Setup(m => m.Stocks).Returns(mockSetStock.Object);
- In welcher Zeile du diese Fehlermeldung bekommen?
- Basis-code scheint, dass Sie mithilfe von Entity framework. wenn ja, ist die problematische Zeile ist ׳dataAccess.Setup - (m => m.Aktien).Gibt(mockSetStock.Objekt);׳. Sie können nicht fake diese Linie, die mit ׳Moq׳. (ich glaube, dataAccess ist StocksModelContext : DbContext{ public DbSet<Stock> Vorräte{ get; set; } })
- Die Störung Auftritt auf Linie dataAccess.Setup - (m => m.Aktien).Gibt(mockSetStock.Objekt); ich bin mit EntityFramework var dataAccess = new Mock<TjiContext>(); public DbSet<Stock> Vorräte { get; set; } So kann die Zeile geändert werden, oder muss ich einen anderen Weg finden, um zu testen, ohne Verwendung von Moq?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Angenommen, Sie sind EF von mindestens V6 und auf dieser Basis Beispiel (Blick auf Blogs-element), das eine sehr ähnliche Sache für Sie. Ich denke, dass Ihr problem ist, dass Ihr
dataAccess
, was auch immer es ist, nicht erklärenStocks
als virtuelle.So sollte es in etwa so Aussehen:
Die Eigenschaft oder Funktion, die Sie versuchen, setup deklariert werden muss, wie
sonst Moq können nicht erstellen Sie eine vererbte Klasse, die überschreibt diese Funktion oder propterty, die gerade nötig ist, wenn Sie einrichten möchten es.