Tenir compte des interfaces de service suivantes:En utilisant RhinoMocks, comment puis-je affirmer qu'une de plusieurs méthodes a été appelée?
public interface IServiceA
{
void DoSomething(string s);
void DoSomething(string s, bool b);
}
public interface IServiceB
{
void DoSomething();
}
La mise en œuvre de IServiceB dépend de IServiceA comme ceci:
public class ServiceB : IServiceB
{
private IServiceA _serviceA;
public ServiceB(IServiceA serviceA)
{
_serviceA = serviceA;
}
public void DoSomething()
{
_serviceA.DoSomething("Hello", true);
}
}
Ie. la dépendance est injectée dans le constructeur.
Considérons maintenant un test unitaire pour la méthode DoSomething()
. Je souhaite affirmer que l'une des méthodes DoSomething surchargées dans IServiceA est appelée, mais en suivant un principe général que les tests unitaires ne devraient pas trop savoir sur les rouages internes de la méthode testée, je souhaite être indifférent à savoir lequel des tests unitaires deux surcharges sont appelées. Considérons le test unitaire suivant:
[TestFixture]
public class ServiceBTests
{
[Test]
public void DoSomething_CallsServiceA()
{
var serviceAMock = MockRepository.GenerateMock<IServiceA>();
var service = new ServiceB(serviceAMock);
service.DoSomething();
// Problem: How to check if EITHER:
serviceAMock.AssertWasCalled(s => s.DoSomething(Arg<String>.Is.NotNull, Arg<bool>.Is.Anything));
// OR:
serviceAMock.AssertWasCalled(s => s.DoSomething(Arg<String>.Is.NotNull));
}
}
Comment puis-je affirmer que soit un ou l'autre des deux méthodes a été appelé?
Hmm. Peut-être que ma pensée est faussée ici. Je suppose que le test unitaire devrait s'assurer que DoSomething() fait exactement ce qu'il devrait faire. Et tandis que le fonctionnement interne de la méthode ne concerne pas le test unitaire, savoir exactement ce que la méthode devrait faire implique, peut-être, de savoir exactement quelle surcharge doit être appelée. Des opinions à ce sujet? –