Вот моя проблема:
У меня есть n-уровневое приложение, для которого я должен написать модульные тесты. Модульные тесты предназначены для бизнес-уровня.
У меня есть метод для проверки, который называется Insert()
, и этот использует два защищенных метода от наследования и напрямую вызывает метод из уровня доступа к данным.
Итак, я сделал фиктивный объект для DAL. Но вот в чем дело, в (edit :) защищенном методе от наследования, он будет использовать другой объект из DAL! Кажется, над этим издеваться невозможно!
Вот метод для тестового кода:
public int Insert(MYOBJECT aMyObject)
{
//first inherited method use the FIRSTDALOBJECT so the mock object --> No problem
aMyObject.SomeField= FirstInherited();
//Second inherited method (see after) --> my problem
aMyObject.SomeOtherField = SecondInherited();
// Direct access to DALMethod, use FIRSTDALOBJECT so the mock -->No Problem
return this.FIRSTDALOBJECT.Insert(aMyObject);
}
Вот метод SecondInherited:
protected string SecondInherited ()
{
// Here is my problem, the mock here seems not be possible for seconddalobject
return ( new SECONDDALOBJECT Sdo().Stuff());
}
А вот код метода модульного тестирования:
[TestMethod()]
public void InsertTest()
{
BLLCLASS_Accessor target = new BLLCLASS_Accessor();
MYOBJECT aMyObject = new MYOBJECT { SomeField = null, SomeOtherField = 1 };
int expected = 1;
int actual;
//mock
var Mock = new Mock<DAL.INTERFACES.IFIRSTDALOBJECT>();
//Rec for calls
List<SOMECLASS> retour = new List<SOMECLASS>();
retour.Add(new SOMECLASS());
//Here is the second call (last from method to test)
Mock
.Setup(p => p.Insert(aMyObject))
.Returns(1);
// Here is the first call (from the FirstInherited())
Mock
.Setup(p => p.GetLast())
.Returns(50);
// Replace the real by the mock
target.demande_provider = Mock.Object;
actual = target.Insert(aMyObject);
Assert.AreEqual(/*Some assertion stuff*/);
}
Спасибо, что прочитали все вопросы :-) Надеюсь, это достаточно понятно.