Предполагая, что вы сгенерировали сборку подделок для интерфейса/класса в вопросе, то это зависит, если вы используете интерфейс (или виртуальный метод) для определения метода или только класса. Если интерфейс или виртуальный метод, вы можете использовать заглушку как
[TestMethod]
public void StubFuncTest()
{
StubITestReader stubClass = new StubITestReader();
stubClass.ExecuteReaderOf1StringFuncOfIDataRecordM0Int32<int>((str, func, timeout) =>
{
int[] retVal = {12, 25, 15};
return retVal;
});
ITestReader reader = stubClass;
IEnumerable<int> curInt = reader.ExecuteReader<int>("testText", TestFunc);
foreach (var i in curInt)
{
Console.WriteLine(i);
}
}
или если только стандартный метод, вы должны будете использовать подкладку (я бы посоветовал использовать первый вариант)
[TestMethod]
public void ShimFuncTest()
{
TestUnitTestClass tutClass = new TestUnitTestClass();
using (ShimsContext.Create())
{
ShimTestUnitTestClass shimClass = new ShimTestUnitTestClass(tutClass);
shimClass.ExecuteReaderOf1StringFuncOfIDataRecordM0Int32<int>((str, func, timeout) =>
{
int[] retVal = {12, 25, 15};
return retVal;
});
IEnumerable<int> curInt = tutClass.ExecuteReader<int>("testText", TestFunc);
foreach (var i in curInt)
{
Console.WriteLine(i);
}
}
}
Добавление ответа на комментарий
Это немного проще для обычных методов. Использование заглушки, было бы что-то вроде
[TestMethod]
public void StubRegFuncTest()
{
StubITestReader stubClass = new StubITestReader();
stubClass.ExecuteNonQueryStringInt32 = (str, timeout) => timeout * 2;
ITestReader reader = stubClass;
int curInt = reader.ExecuteNonQuery("testText");
Console.WriteLine(curInt);
curInt = reader.ExecuteNonQuery("testText", 10);
Console.WriteLine(curInt);
}
не столь-очевидного различия является шаблонным методом заключен в скобках в то время как нормальный метод просто лямбда-выражение и блок кода.
Hi doobop, Спасибо за ваш ответ. первый ответ это работает для общего метода, но если я скажу нормальный метод, то в этом случае это не работает, как int ExecuteNonQuery (string commandText, int timeOut = 30); – Robin