调试测试时跳出DesignTime

调试测试时跳出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:看代码。

感谢您的帮助。

+0

你不能“跳出设计时间”。您的用户控件要么在设计器中显示,要么在运行时显示。解释你究竟想要做什么,并详细说明“跳出设计时间”的含义。回答这个问题需要更多的上下文。如果你的意思是你想让属性'IsNotInDesignMode'在单元测试控件的时候获得一定的值,那么创建一个构造函数参数来设置这个属性,或者直接从你的单元测试中分配它。 – CodeCaster

+0

我知道你可能不了解我的问题。但为什么你把它标记为重复?您阻止其他用户打开我的问题并尝试给出答案。您提供的链接是完全不同的问题。 – Febertson

+0

您给出的问题描述由副本回答:您只能_detect_,而不是_change_设计时间 - 它是只读属性。所以如果你想让你的真正问题得到解决,请阅读[问]和[编辑]你的问题,以便实际回答问题,我很乐意重新开放。 – CodeCaster

看起来您已将业务逻辑与视图逻辑混合在一起。没有理由单元测试GUI。

我建议你将自己的业务逻辑封装到自己的类中。然后从视图中调用特定的操作。

一旦完成,您的单元测试可以直接测试业务逻辑而不处理设计时间。

+0

感谢这第一种方法,但方法中没有业务逻辑。例如,SomeMethod可能是LoadedEvent。我不能把我的东西放到构造函数或其他地方,因为我需要的值没有设置在那里。 – Febertson

+0

@Febertson使用正确的MVVM,您应该可以为视图和视图模型分别创建项目。单元测试甚至不应该引用视图项目,因为他们只需要viewmodel和BLL。 – grek40

+0

我明白你在说什么。但我有一个控件,它有一个新的Property来生成动态子元素。这是我想测试的功能。在我的测试中创建控件。设置新的属性,看看孩子是否正确创建。这个功能纯粹在UI方面。 也许这不应该或不能用UnitTests测试。这就是我现在正在评估的东西。 – Febertson