J'ai un contrôleur D'où j'appelle (DI de BLL) à la couche Business Logic (BLL). De BLL, j'appelle la couche d'accès aux données (DAL) via une autre interface.
Le constructeur de couche DAL est injecté avec l'instance DBContext (aucune interface n'est injectée ici).
Donc, en utilisant MOQ, nous pouvons tester le contrôleur, BLL et couche intermédiaire. Mais comment tester la couche DLL?
public class DAL():IDAL
{
private DBEntities entity;
public DAL(DBEntities DB)
{
entity = DB;
}
public list<string> ABC()
{
var a = SqlMapper.Query<class>(entity.Database.Connection, "",param,commandType: CommandType.StoredProcedure).ToList();
return a;
}
}
Fondamentalement ma requête comment et quoi se moquer ici? Ici, nous implémentons l'IDAL, mais nous ne l'injectons pas ici.
La question n'est toujours pas claire à 100% mais j'essaie de donner une réponse.
Il n'est pas nécessaire de DBEntities
. Si vous voulez vous assurer que vos requêtes renvoient le résultat correct, testez-le avec une base de données pré-remplie bien connue que vous utilisez uniquement pour vos tests.
Si vous voulez tester votre logique d’entreprise et que vous devez vous moquer de votre couche d’accès aux données, moquez-vous! Alors créez une interface avec vos méthodes:
public interface IDAL
{
List<string> ABC();
}
Dans votre test unitaire, vous pouvez simuler l'interface avec:
var dataAccessMock = new Mock<IDAL>();
dataAccessMock.Setup(x => x.ABC()).Returns(new List<string> {"ABC", "DEF", "GHI" });
// get an IDAL instance which you can inject / use
var mockedInstance = dataAccessMock.Object;
// get the mocked list
var list = mockedInstance.ABC();