Ich habe einen Job, in dem ich einen IDisposable DbContext habe. Ich würde gerne diesen Job testen, ohne in eine Datenbank zu gehen. Welche Möglichkeiten muss ich haben?Wie wird mit einem IDisposable-Repository mit Unity verfahren?
Ich benutze die Standard-Fakes-Assembly 'von Microsoft.
Mein Beruf:
public void Work()
{
do
{
//code here
using (var repository = new Repository<User>())
{
repository.Save(user);
}
} while (true);
}
Ich versuche, zu testen und in diesem Teil des Tests versagt, weil es tatsächlich eine neue Instanz der Repository-Klasse erstellt.
Mein Test-Methode:
using (ShimsContext.Create())
{
Data.Repository.Fakes.ShimRepository<Domain.Fakes.ShimUser>.Constructor = (a) => { };
Data.Repository.Fakes.ShimRepository<Domain.Fakes.ShimUser>.AllInstances.SaveT0 = (a, b) =>
{
};
var service = GetService();
service.Work(); //Throws exception
}
Wie kann ich gefälschte diese Save
Methode?
siehe Dependency Injection - Sie müssen einen übergebenen Parameter an Work() übergeben. Oder zumindest in den Dienst, ansonsten erstellt er immer einen echten. –
Ich kenne mich mit Fakes nicht aus, aber vielleicht ist es nicht voll genug für Ihre Bedürfnisse. Ich weiß, das ist trivial mit einer Bibliothek wie Moq (https://github.com/Moq/moq4). –
Es wäre auch nicht trivial mit Moq, da er eine tatsächliche konkrete Instanz des Repository in der Arbeit instanziiert. –