J'ai quelques problèmes avec le fait de railler une variable locale dans une méthode de ma classe.Modélisation d'une variable locale dans la méthode d'appel
Je tente de mocker ma classe Worker mais elle appelle une méthode qui renvoie une valeur nulle et ma variable de contexte devient null. De ce fait, je reçois une exception lorsque j'essaie d'obtenir la propriété Name.
Comment forcer CreateWorkerContext()
pour renvoyer des valeurs fictives? Peut-il y avoir un moyen de se moquer d'une variable locale (context
)?
Merci!
Mon code dira plus sur le problème:
namespace Moq
{
class Program
{
static void Main(string[] args)
{
var workerMock = new Mock<Worker>();
workerMock.Object.GetContextName();
}
}
public class Worker
{
public string GetContextName()
{
// something happens and context does not create (imitated situation)
WorkerContext context = CreateWorkerContext();
// exception because _context is null
return context.Name;
}
private WorkerContext CreateWorkerContext()
{
// imitate that context is not created
return null;
}
}
public class WorkerContext
{
public string Name { get; set; }
}
}
Vous devez extraire ou modifier 'WorkerContext CreateWorkerContext()' entièrement. Peut-être injecter un 'IWorkerContextFactory' dans le constructeur' Worker'. – CodeCaster
1 pour l'usine. Ou rendre le 'IWorkerContex' injectable. – rbm
Il n'y a donc aucun moyen de se moquer sans changer le code initial. Triste – yurart