我想创建一个从 Mock 继承属性的类。这样,当我调用它时,我可以无缝地使用设置方法和其他功能
这是我的课
public class MockSettingsManager : Mock // I know this doesn't work, but I want a similar solution to it
{
private static SettingManagerCore singletonSettingManagerCore = null;
private SettingManagerCore SettingManagerCore
{
get
{
if (settingManagerCore== null)
{
Mock<SettingManagerCore> settingManagerCoreMock = new Mock<SettingManagerCore>()
{
CallBase = true
};
settingManagerCore = settingManagerMock.Object;
}
return singletonSettingManagerCore;
}
}
public virtual T GetSetting<T>(string name)
{
return SettingManagerCore.GetSetting<T>(name);
}
}
现在我想这样称呼它
[TestClass]
public class MyTests
{
private MockSettingsManager settingsManagerMock = null!;
[TestInitialize]
public void Initialize()
{
settingsManagerMock = new MockSettingsManager() { CallBase = true };
// This one should go to the callbase
var test = settingsManagerMock.Object.GetSetting<string>("Test");
// This one should retrive Test1
settingsManagerMock.Setup(x => x.GetSetting<string>("Test")).Returns("Test1")
test = settingsManagerMock.Object.GetSetting<string>("Test");
}
}
有人有什么想法吗?或者有可能吗?
您可以定义一个封装对象创建的函数,即
Creation Method:,而不是继承自
Mock
internal Mock<SettingManagerCore> CreateSettingManagerTestDouble()
{
return new Mock<SettingManagerCore>() { CallBase = true };
}
这个甚至已经到了值得写的门槛,因为那里几乎没有发生什么,但它确实给了你一个可以定义额外行为的点。
然后使用测试中的 if :
settingsManagerMock = CreateSettingManagerTestDouble();
// This one should go to the callbase
var test = settingsManagerMock.Object.GetSetting<string>("Test");
// This one should retrive Test1
settingsManagerMock.Setup(x => x.GetSetting<string>("Test")).Returns("Test1")
test = settingsManagerMock.Object.GetSetting<string>("Test");