Rhino Se Moque De Fantaisie Partielle
Je suis en train de tester la logique de certaines classes existantes. Il n'est pas possible de ré-facteur de classes à l'heure actuelle, car ils sont très complexes et dans la production.
Ce que je veux faire c'est créer un objet fantaisie et de tester une méthode qui appelle en interne une autre méthode qui est très difficile à simuler.
Donc, je veux juste définir un comportement pour le secondaire d'un appel de méthode.
Mais quand je configurer le comportement de la méthode, le code de la méthode est invoquée et échoue.
Suis-je raté quelque chose ou est-ce tout simplement pas possible de tester sans re-factoring la classe?
J'ai essayé toutes les différentes maquette types (Strick,Stub,Dynamique,Partielle ect.) mais tous l'appel de la méthode lorsque j'essaie de configurer le comportement.
using System;
using MbUnit.Framework;
using Rhino.Mocks;
namespace MMBusinessObjects.Tests
{
[TestFixture]
public class PartialMockExampleFixture
{
[Test]
public void Simple_Partial_Mock_Test()
{
const string param = "anything";
//setup mocks
MockRepository mocks = new MockRepository();
var mockTestClass = mocks.StrictMock<TestClass>();
//record beahviour *** actualy call into the real method stub ***
Expect.Call(mockTestClass.MethodToMock(param)).Return(true);
//never get to here
mocks.ReplayAll();
//this is what i want to test
Assert.IsTrue(mockTestClass.MethodIWantToTest(param));
}
public class TestClass
{
public bool MethodToMock(string param)
{
//some logic that is very hard to mock
throw new NotImplementedException();
}
public bool MethodIWantToTest(string param)
{
//this method calls the
if( MethodToMock(param) )
{
//some logic i want to test
}
return true;
}
}
}
}
Vous devez vous connecter pour publier un commentaire.
MethodToMock n'est pas virtuel et par conséquent ne peut pas être bafoué. Ce que vous voulez faire est possible avec une fantaisie partielle (je l'ai fait dans des cas semblables à la vôtre), mais la méthode que vous voulez pour se moquer doit faire partie d'une interface de mise en œuvre ou être marqué virtuel. Sinon, vous ne pouvez pas vous moquer avec Rhino.Des simulacres.
Je recommande pas se moquant de méthodes dans la classe sous test, mais votre situation est peut-être unique dans le sens que vous ne pouvez pas refactoriser la classe pour la rendre plus facile à tester à l'heure actuelle. Vous pourriez essayer d'utiliser explicitement un délégué pour empêcher la méthode d'être appelé lors de la configuration de l'appel.
Ou, passer à l'utilisation de l'AAA de la syntaxe, en omettant le obsolète constructions.