Rhino Mocks: Comment stub une méthode générique pour attraper un type anonyme?

Nous devons stub une méthode générique qui sera appelée en utilisant un type anonyme comme paramètre type. Considérer:

interface IProgressReporter { T Report(T progressUpdater); } // Unit test arrange: Func returnArg = (x => x); // we wish to return the argument _reporter.Stub(x => x.Report(null).IgnoreArguments().Do(returnArg); 

Cela fonctionnerait si l’appel réel de .Report () dans la méthode à tester était effectué avec object comme paramètre de type, mais qu’en réalité, la méthode est appelée, T étant un type anonyme. Ce type n’est pas disponible en dehors de la méthode testée. En conséquence, le stub n’est jamais appelé.

Est-il possible d’emstackr une méthode générique sans spécifier le paramètre type?

Votre cas d’utilisation n’est pas clair, mais vous pourrez peut-être utiliser une méthode d’assistance pour configurer le stub pour chaque test. Je n’ai pas RhinoMocks, donc je n’ai pas pu vérifier si cela fonctionnerait

 private void HelperMethod() { Func returnArg = (x => x); // or use T in place of object if thats what you require _reporter.Stub(x => x.Report(null)).IgnoreArguments().Do(returnArg); } 

Ensuite, dans votre test, faites:

 public void MyTest() { HelperMethod(); // rest of your test code } 

Pour répondre à votre question: non, il n’est pas possible de remplacer une méthode générique sans connaître les arguments génériques avec Rhino. Les arguments génériques sont une partie essentielle de la signature de la méthode dans Rhino, et il n’y a pas de “Any”.

Le moyen le plus simple dans votre cas serait d’écrire simplement une classe fictive écrite à la main, qui fournit une implémentation factice d’ IProgressReporter .

 class ProgressReporterMock : IProgressReporter { T Report(T progressUpdater) { return progressUpdater; } }