Moq - Comment retourner un moqué d'objet à partir d'une méthode?
Je suis nouveau sur le Moq, et souhaitez l'utiliser non seulement dans les tests unitaires où j'semblent pour la plupart l'obtenir, mais dans le code.
Compte tenu de cette entité:
namespace TestBed.Domain.Entities
{
public class Person
{
public string LastName { get; set; }
public string FirstName { get; set; }
public string PhoneNumber { get; set; }
public string JobTitle { get; set; }
}
}
et ce résumé du Référentiel:
using TestBed.Domain.Entities;
namespace TestBed.Domain.Abstract
{
public interface IPersonRepository
{
Person GetPerson();
}
}
Je veux utiliser Moq pour remplir un mannequin personne (!) et peuplées de "l'objet" du Référentiel de la méthode. Comment puis-je faire cela?
using TestBed.Domain.Abstract;
using TestBed.Domain.Entities;
using Moq;
namespace TestBed.Domain.Concrete
{
public class MockPersonReqpository
{
Person GetPerson()
{
Mock<IPersonRepository> mock = new Mock<IPersonRepository>();
mock.Setup(m => m.GetPerson()).Returns(new Person()
{
FirstName = "Joe",
LastName = "Smith",
PhoneNumber = "555-555-5555"
});
return mock.Object //NO
}
}
}
OriginalL'auteur Sam Gentile | 2011-07-13
Vous devez vous connecter pour publier un commentaire.
se moquer.Objet renvoie une maquette de type IPersonRepository. Le type de retour de la GetPerson() méthode attend un objet de type Personne.
L'autre chose est que vous n'êtes pas la création d'une maquette pour une Personne, donc je ne vois pas l'intérêt de ce code. Je ne suis pas sûr de ce que tu veux dire par factice mais vous pourriez tout aussi bien le faire:
Comme je le vois Moq est une aide pour le test, il se moque de loin toutes les dépendances de sorte que vous pouvez tester la logique du code sous test. Vous pouvez faire tout ce que Moq n'manuellement (se moque et talons), Moq seulement la rend plus facile. Une maquette est une façon d'affirmer si l'objet sous test a agi comme prévu avec la maquette. Dans votre cas, vous voulez juste créer une Personne avec des données fausses, si je vous comprends bien? Vous n'avez pas besoin de Moq. Il suffit de créer un FakePersonRepository qui retourne une Personne avec des données fausses.
Ok< je comprends.
OriginalL'auteur Daniel Lee
De votre commentaire sur @Daniel réponse, il semble que vous avez juste besoin d'imiter le référentiel lui-même. Vous voulez encore de retour d'un bon
Person
objet, vous n'avez pas la façon dont le référentiel est en fait la récupération de cette personne aux fins de votre test.Aussi, je ne comprends pas votre commentaire sur l'utilisation de Moq dans d'autres endroits en dehors des tests unitaires. Le point de l'ensemble de Moq est de sorte que vous pouvez vous faux un objet réel à des fins de test (sans doute mieux que cela, mais c'est l'essentiel).
Car je ne sais pas ce que vous essayez de tester exactement, je vais vous donner un exemple trivial:
var mock = new Mock<T>()
produit le même type devar mock = new Mock<T>.Setup()
. Mais il ne le fait pas. Donc, je n'aurais pas essayé d'essayer de construire et de manipuler dans le même appel.OriginalL'auteur Andrew Whitaker