【发布时间】:2013-03-21 18:20:04
【问题描述】:
我有一个静态的Configuration 类负责我的整个系统的数据设置。它在其构造函数中从注册表加载某些值,并且它的所有方法都基于这些值。如果它无法从注册表中获取值(如果尚未激活应用程序则可能),它会抛出一个异常,转换为 TypeInitializationException,这对我来说很好。
我使用 NUnit 编写了单元测试,以确保 Configuration 的构造函数正确处理所有情况 - 正常值、空白值、Null 值。每个测试使用相关值初始化注册表,然后调用 Configuration 中的一些方法。 这就是问题所在:NUnit 决定首先运行 Null 测试。它清除注册表,初始化配置,抛出异常 - 一切都很好。但是,因为这是一个静态类,其构造函数刚刚失败 - 它不会为其他测试再次重新构造该类,并且它们都失败了。
即使没有 Null 测试,我也会遇到问题,因为 Configuration 可能(我猜)为所有使用它的类初始化一次。
我的问题是:我应该使用反射来为每个测试重新构建类,还是应该重新设计这个类来检查属性而不是构造函数中的注册表?
【问题讨论】:
-
您可以将加载代码移动到 Configuration 类的方法中,而不是构造函数中。然后,您可以使用不同的场景对该函数进行单元测试。
-
@rgunawan 同意,这似乎是一个非常简单的修改。只需将构造函数的整个主体移动到一个方法中,并让构造函数简单地调用该方法。然后可以从单元测试中调用相同的方法。看起来很简单。
标签: c# unit-testing nunit static-constructor