如何测试视图模型是否处于设计器模式,是否在 C# 中
本文关键字:是否 模式 何测试 测试 模型 视图 | 更新日期: 2023-09-27 18:35:47
我是C#和WPF的新手,所以我想从MVVM的书开始。我有一个小型 WPF 应用程序,我想测试我的视图模型是否在设计器模式下创建(检查设计器属性);鉴于我有一个 IDataService,它从硬编码列表(设计时)或 REST 服务(运行时)向 ViewModel 提供数据。
有没有办法模拟或存根此 DesignerProperties 对象以强制它成为一种或另一种状态?
提前谢谢。
有没有办法模拟或存根此设计器属性对象以强制 它应该是一个或另一个状态?
不。它是一个静态类;除非你使用"Microsoft假货"或"类型模拟",否则你不能轻易地嘲笑。
但是你可以为DesignerProperties创建一个抽象,比如说IDesignerProperties
它有你感兴趣的方法/属性,然后注入它。这样它现在只是一个界面;您可以像模拟所有其他依赖项一样模拟它。
你可以为静态类创建一个包装器。我不熟悉DesignerProperties
类,但我在下面创建了一个示例。还要研究依赖注入/控制反转,以便于单元测试。
静态类
static class DesignerProperties
{
public bool IsInDesigner { get; }
public void DoSomething(string arg);
// Other properties and methods
}
用于依赖注入和模拟的接口。(您可以使用 T4 模板通过反射静态类进行自动生成)
interface IDesignerProperties
{
bool IsInDesigner { get; }
void DoSomething(string arg);
// mimic properties and methods from the static class here
}
运行时使用的实际类
class DesignerPropertiesWrapper : IDesignerProperties
{
public bool IsInDesigner
{
get { return DesignerProperties.IsInDesigner; }
}
public void DoSomething(string arg)
{
DesignerProperties.DoSomething(arg);
}
// forward other properties and methods to the static class
}
单元测试的模拟类
class DesignerpropertiesMock : IDesignerProperties
{
public bool IsInDesigner { get; set; } //setter accessible for Mocking
}
用法
class ViewModel
{
private readonly IDesignerProperties _designerProperties;
// Inject the proper implementation
public ViewModel(IDesignerProperties designerProperties)
{
_designerProperties = designerProperties;
}
}
我希望这对你有帮助。