调试测试时跳出DesignTime
目前我正在为CustomControl开发UnitTest。在此控件中有一些代码,只有在DesignTime中未调用被调用的方法时才会执行该代码。当我运行测试时,给定的代码不会执行,因为当前上下文似乎是DesignTime。调试测试时跳出DesignTime
例子:
public void SomeMethod() // EDIT: this is the OnLoaded Event for example.
{
if(IsNotInDesignMode()) // This is implemented somewhere else.
{
// I want this to be called in the Test Execution.
DoSomething();
}
}
编辑: 好像我第一次尝试wasnt不够清楚,所以这里的另一种描述。
有没有办法告诉我的测试方法/类运行测试作为运行时版本?我不想更改我的CustomControl中的属性或方法。而且我没有熟悉Method IsNotInDesignMode()(例如通过模拟它),因为它是在外部库中实现的。
编辑2:看代码。
感谢您的帮助。
看起来您已将业务逻辑与视图逻辑混合在一起。没有理由单元测试GUI。
我建议你将自己的业务逻辑封装到自己的类中。然后从视图中调用特定的操作。
一旦完成,您的单元测试可以直接测试业务逻辑而不处理设计时间。
感谢这第一种方法,但方法中没有业务逻辑。例如,SomeMethod可能是LoadedEvent。我不能把我的东西放到构造函数或其他地方,因为我需要的值没有设置在那里。 – Febertson
@Febertson使用正确的MVVM,您应该可以为视图和视图模型分别创建项目。单元测试甚至不应该引用视图项目,因为他们只需要viewmodel和BLL。 – grek40
我明白你在说什么。但我有一个控件,它有一个新的Property来生成动态子元素。这是我想测试的功能。在我的测试中创建控件。设置新的属性,看看孩子是否正确创建。这个功能纯粹在UI方面。 也许这不应该或不能用UnitTests测试。这就是我现在正在评估的东西。 – Febertson
你不能“跳出设计时间”。您的用户控件要么在设计器中显示,要么在运行时显示。解释你究竟想要做什么,并详细说明“跳出设计时间”的含义。回答这个问题需要更多的上下文。如果你的意思是你想让属性'IsNotInDesignMode'在单元测试控件的时候获得一定的值,那么创建一个构造函数参数来设置这个属性,或者直接从你的单元测试中分配它。 – CodeCaster
我知道你可能不了解我的问题。但为什么你把它标记为重复?您阻止其他用户打开我的问题并尝试给出答案。您提供的链接是完全不同的问题。 – Febertson
您给出的问题描述由副本回答:您只能_detect_,而不是_change_设计时间 - 它是只读属性。所以如果你想让你的真正问题得到解决,请阅读[问]和[编辑]你的问题,以便实际回答问题,我很乐意重新开放。 – CodeCaster