У меня есть класс, который имеет частный конструктор и доступен через общедоступный статический метод (singleton class). Не удалось создать одноэлементный объект этого класса в подделках.Поддельный статический/одиночный класс/метод с использованием подделок microsoft
public class MyBusinessManager : BusinessManager
{
private MyBusinessManager objMyBusinessManager;
private MyBusinessManager (MyBusinessManager dvqsDataManager)
{
objMyBusinessManager= dvqsDataManager;
}
public static MyBusinessManager GetInstance() // out
{
MyBusinessManager dvqsDataMgr = new MyBusinessManager();
return new MyBusinessManager (dvqsDataMgr);
}
public bool MyBusinessManagerMethod (int bm)
{
if(bm == 0)
return true;
return false;
}
}
Я хочу проверить следующий метод:
public class MyService
{
public bool MyServiceMethod(int serviceParam)
{
MyBusinessManager dvqBusinessManager = MyBusinessManager.GetInstance(); // make fake call
return dvqBusinessManager.MyBusinessManagerMethod(serviceParam); // make fake service call
}
}
Мой тест Класс:
[TestClass]
public class MyService_UT
{
[TestMethod]
public void TestMethod1()
{
using (ShimsContext.Create())
{
ShimMyBusinessManager.GetInstance =() => { return new ShimMyBusinessManager(); };
ShimMyBusinessManager.AllInstances.MyServiceMethodInt32 = (a) =>{
return true;
}
MyService obj = new MyService();
Assert.IsTrue(obj.MyServiceMethod(1))// doesn't call fake method
}
}
}
Как назвать фальшивый метод в этом случае? Невозможно создать экземпляр подделки с этим кодом.
Вы только что узнали одну из причин, по которой одиночные игры - это «анти-шаблон». – Joe
Исправить. Это старый код. Но как выйти из этого? – user2323308
Возможно, было бы проще реорганизовать дрянной старый код вместо того, чтобы поместить еще один слой дерьмового кода сверху, чтобы проверить его. – nvoigt