2

ModelConstants単体テストでは、メイン プロジェクトの静的クラス () の定数をテスト プロジェクトで使用しようとしています。

int ones = ModelConstants.PLOT_STORE_PRECISION_FACTOR * ModelConstants.RECENT_SAMPLES;

このテスト メソッドを実行しようとすると、TypeInitializationException上記の行に a が表示されます。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 に答える