无法从测试项目中访问静态常量

时间:2013-09-17 17:59:40

标签: c# .net unit-testing

对于我的单元测试,我正在尝试在我的测试项目中使用我的主项目的静态类(ModelConstants)中的常量。

int ones = ModelConstants.PLOT_STORE_PRECISION_FACTOR * ModelConstants.RECENT_SAMPLES;

尝试运行此测试方法时,我在上面的行中得到TypeInitializationException。 InnerException是FileNotFoundException,表示无法找到程序集System.Windows。这对我来说没有意义,但我想静态常量类可能会以某种方式无法正确初始化。这可能是什么原因?

顺便说一句,我可以毫无问题地实例化我的主项目的非静态类。

修改

常量定义如下:

public static readonly int TRACKING_INTERVAL = 200;
public static readonly int SAMPLE_WINDOW = 3;
public static readonly int PLOT_STORE_PRECISION_FACTOR = 1000 / TRACKING_INTERVAL;

2 个答案:

答案 0 :(得分:3)

public static readonly int TRACKING_INTERVAL = 200;
public static readonly int SAMPLE_WINDOW = 3;
public static readonly int PLOT_STORE_PRECISION_FACTOR = 1000 / TRACKING_INTERVAL;

那些不是常数。这些是类静态字段。在读取这样的字段时,将调用静态类构造函数。你有TypeInitializationException,它会抛出类型初始化。原因在于InnerException

相反,我建议使用常量:

public const int TRACKING_INTERVAL = 200;
public const int SAMPLE_WINDOW = 3;
public const int PLOT_STORE_PRECISION_FACTOR = 1000 / TRACKING_INTERVAL;

在编译时检查和访问它们,甚至可以提高性能。

答案 1 :(得分:1)

根据您提供的数据,我看到错误的唯一可能原因是ModelConstants类具有static constructor,由于某种原因,它仅在测试项目中抛出异常。 / p>

可能是构造函数访问了一些未在测试项目中初始化的全局状态。