Je suis nouveau à Moq, et j'aimerais écrire des tests unitaires en l'utilisant. J'ai une base de données avec quelques tables, comme:C#/Moq - Comment remplir avec des données de test à plusieurs niveaux?
EducationUser | Application
- UsrName - Student
- UsrPwd - CourseId
- UsrChallenge - Date
- IsTeacher - Grade
- FullName
Ceci est une base de données sur un localdb
, que je veux moquer. J'ai créé les entités en utilisant Entity Framework. L'interface de ces entités est IEducationEntities
.
Maintenant, je voudrais créer un objet fantaisie et faire quelques tests de certains services Web, comme:
[TestMethod()]
public void LoginTest()
{
HttpResponseMessage response = Request.CreateResponse(_accountController.Login("andrew", "DefaultPassword"));
Assert.IsTrue(response.IsSuccessStatusCode, "User unable to log in with correct login info");
}
Pour ce faire, de ce que je l'ai compris de la documentation, je devrais pouvoir faire quelque chose comme:
[TestClass()]
public class AccountControllerTests : ApiController
{
Mock<IEducationEntities> _entities = new Mock<IEducationEntities>(MockBehavior.Strict);
private AccountController _accountController;
public AccountControllerTests() {
_accountController = new AccountController(_entities.Object);
_entities.Setup(table => table.EducationUsers.UsrName).Returns("andrew");
_entities.Setup(table => table.EducationUsers.UsrPwd).Returns("DefaultPassword");
}
[TestMethod] //etc, defining tests below
Cependant, cela ne fonctionne pas du tout, étant donné que les entités générées par le databse ne contiennent pas d'informations sur les sous-zones apparemment, et je reçois l'erreur:
'DbSet' does not contain a definition for 'UsrPwd' and no extension method 'UsrPwd' accepting a first argument of type 'DbSet' could be found (are you missing a using directive or an assembly reference?)
Qu'est-ce qui me manque? Comment remplir un objet moq
avec des données de test ayant la même structure que ma base de données?
Dans la structure de votre table par exemple, le mot de passe est appelé 'UsrPassword', mais vous l'appelez' UsrPwd' dans votre test/code maquette. –