我怎样才能用 NSubstitute 模拟一个单身人士 class?
How can I mock a singleton class with NSubstitute?
我有一个单身人士 class,像这样:
public class XConnector : IXConnector
{
private static readonly Lazy<XConnector> instance =
new Lazy<XConnector>(() => new XConnector());
public static XConnector Instance => instance.Value;
private XConnector()
{
}
public async Task<XConnector> GetData(XConnector con)
{
}
}
如何使用 NSubstitute 模拟这个 class?
另一方面:我想要这样的东西
var target = Substitute.For<IXConnector>();
这是我调试此代码时的快速观察
欢迎任何帮助。
我不记得环境上下文模式的实现,我手头没有书。但是,它看起来像这样:
public class XConnector : IXConnector
{
private static IXConnector _instance = new XConnector();
private XConnector()
{
}
public static IXConnector Current
{
get
{
return _instance;
}
set
{
// Think about thread-safety
// Check for null?
_instance = value;
}
}
public async Task<XConnector> GetData(XConnector con)
{
}
}
那么你的测试可以这样做:
XConnector.Current = Substitute.For<IXConnector>();
您的功能代码可以执行此操作,使用默认实例或假实例:
XConnector.Current.GetData(...);
我有一个单身人士 class,像这样:
public class XConnector : IXConnector
{
private static readonly Lazy<XConnector> instance =
new Lazy<XConnector>(() => new XConnector());
public static XConnector Instance => instance.Value;
private XConnector()
{
}
public async Task<XConnector> GetData(XConnector con)
{
}
}
如何使用 NSubstitute 模拟这个 class?
另一方面:我想要这样的东西
var target = Substitute.For<IXConnector>();
这是我调试此代码时的快速观察
我不记得环境上下文模式的实现,我手头没有书。但是,它看起来像这样:
public class XConnector : IXConnector
{
private static IXConnector _instance = new XConnector();
private XConnector()
{
}
public static IXConnector Current
{
get
{
return _instance;
}
set
{
// Think about thread-safety
// Check for null?
_instance = value;
}
}
public async Task<XConnector> GetData(XConnector con)
{
}
}
那么你的测试可以这样做:
XConnector.Current = Substitute.For<IXConnector>();
您的功能代码可以执行此操作,使用默认实例或假实例:
XConnector.Current.GetData(...);