2

对于我的单元测试,我试图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;
4

2 回答 2

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;

这些在编译时被检查和访问,甚至可以提高性能。

于 2013-09-17T19:20:32.613 回答
1

从您提供的数据中,我看到该错误的唯一可能原因是ModelConstants该类具有一个静态构造函数,由于某种原因,该构造函数仅在测试项目中引发异常。

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

于 2013-09-17T19:20:09.440 回答