DataService in Test env gibt beim Abrufen von InMemoryDb-Daten immer null zurück

user1765862
public class TestStartup : Startup
{
    private readonly Mock<ICarService> _carServiceMock;
    public TestStartup(IConfiguration configuration) : base(configuration)
    {
        _carServiceMock = new Mock<ICarService>();
    }

    public override void ConfigureMyServices(IServiceCollection services)
    {
        services.AddSingleton(_carServiceMock.Object);
    }

    public override void ConfigureDatabase(IServiceCollection services)
    {
        services.AddDbContext<CarContext>(options => options.UseInMemoryDatabase("CarDb"));
        services.AddTransient<DataSeed>();
    }   
}

public class TestFixture: IDisposable, ICollectionFixture<TestFixture>
{
    public TestFixture()
    {
         _server = new TestServer(new WebHostBuilder()
            .UseStartup<TestStartup>()
            .UseEnvironment("Development"));
          _client = _server.CreateClient();
    }
}

Innen - Controller Ich verwende ICarServicedie unter Verwendung von CarContextDaten aus dem Db abzurufen.

public class CarController
{
    private readonly ICarService _carService;

    public CarController(ICarService carService)
    {
        _carService = carService;            
    }

    [HttpGet]
    public async Task<IActionResult> Get([FromRoute] int id)
    {
        var contact = await _carService.GetAsync(id); **// this is always null**
    }
}

Meine Frage ist: Da dies ein Integrationstest ist, muss ich mich zuerst über ICarService lustig machen und wenn ja, was mache ich hier falsch?

Einfach Ged

Wenn Sie testen, wie die CarServiceKlasse mit der Datenbank interagiert, sollten Sie sie nicht verspotten.

Sie möchten die reale CarServiceImplementierung verwenden und die InMemoryDatabase als CarContextParameter in diese Klasse einfügen .

Entfernen Sie also die Mock<ICarService>und registrieren Sie stattdessen die echte.

Warum gibt es null zurück?

Wenn Sie in Ihrem Beispiel die Methode _carService.GetAsync(id)aufrufen, wird die Mock-Klasse aufgerufen . Sie haben jedoch Setupkeine Methoden für das Modell, sodass alle Aufrufe zurückgegeben werden null.

Sie müssen Folgendes hinzufügen, damit die verspottete Methode einen Wert zurückgibt:

_carService.Setup(cs => cs.GetAsync(It.IsAny<int>()).Returns(1);

Dies würde jedoch nicht die In-Memory-Datenbank aufrufen, da Sie ein Modell für verwenden CarService.

Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.

Bei Verstößen wenden Sie sich bitte [email protected] Löschen.

bearbeiten am
0

Lass mich ein paar Worte sagen

0Kommentare
LoginNach der Teilnahme an der Überprüfung

Verwandte Artikel

Map.get() in node js javascript gibt beim Abrufen von Daten von mongodb immer undefiniert zurück

UseContext Daten von API abrufen Gibt null zurück

Die Formel zum Abrufen von Daten von einem anderen Blatt gibt in PhpSpreadsheet immer Kleinbuchstaben zurück

Meine Cookie-Klasse gibt beim Abrufen des Cookies immer null zurück

Probleme beim Einfügen von Daten in SQLite mithilfe von long Gibt immer -1 zurück

Das Abrufen von untergeordneten Knoten gibt immer null XML C# zurück.

Laravel 5 - env () gibt immer null zurück

Die Variable Laravel .env gibt immer null zurück

SQLite UWP - Abrufen von Daten einer Zeile gibt null zurück

Das Abrufen von Daten in der Blazor-App gibt ein Null-Array zurück

$ find gibt beim Abrufen von Telerik-Steuerelementen in Javascript null zurück

Angularjs $ http get gibt beim Abrufen des Benutzernamens vom MVC-Controller immer null oder leere Zeichenfolgen zurück

getTag () gibt beim Aufruf im Fragment immer null zurück

Moq-Test - Verspotteter Serviceabruf gibt immer Null zurück

Das Abfragen von Daten aus Neo4j mithilfe von Federdaten gibt immer null zurück

Das Abrufen von Daten mit Firebase gibt nichts zurück

NSKeyedUnarchiver gibt beim Abrufen einer benutzerdefinierten Klasse null zurück

Die Verwendung von @MockBean gibt immer null zurück

Schnelles Datum von Zeichenfolge gibt immer Null zurück

Das Casting von double gibt immer Null zurück

Das Lesen von .plist gibt immer null zurück

Der Speicherwert von JpaRepository gibt immer null zurück

Reagieren Sie beim Abrufen von Daten immer und immer wieder

Abrufen von Daten von Firebase geben null in onCreateView zurück

Django - Das Abrufen von Daten funktioniert auf der Shell, gibt jedoch beim Debuggen "Objekt ist nicht iterierbar" zurück

yfinance gibt Fehler beim Herunterladen von Daten zurück

Das Abrufen von Elementen aus localstorage gibt null zurück

SharedPreferences geben beim Abrufen von Werten null zurück

Warum gibt "getSharedPreferences" beim Unit-Test null zurück?

TOP Liste

heißlabel

Archiv