0

状況は、プラグイン インターフェイスがあるということです。インターフェイスには、受け入れ基準にリストされているメソッドがあり、それ以外のメソッドがないことを確認したいと考えています。これについてはどうすればよいでしょうか?現在 NUnit と Moq を使用していますが、これらで達成できない場合は、代替案についてアドバイスしてください。

例えば:

Public Interface IPlugin {
  bool Start();
  bool Stop();
}

それらを呼び出して戻り値を受け取るためのテストがありますが、問題ありません。しかし、IPlugin に Start と Stop のみがあり、Restart() などのようなものがないことを確認するにはどうすればよいでしょうか?

4

5 に答える 5

4

Type.GetMethodsメソッドなどのリフレクションを使用します。

Type myType =(typeof(IPlugin));

// Get the public methods.
MethodInfo[] myArrayMethodInfo = myType.GetMethods();

Console.WriteLine("The number of public methods is {0}.", myArrayMethodInfo.Length);
于 2013-07-09T19:05:56.853 に答える
3

がアセンブリ内で定義されたインターフェイスである場合IPlugin、メソッドはコンパイル時に認識されます。インターフェイス自体には既知の固定構造があるため、他のメソッドをチェックする理由はありません。

このインターフェイスを実装するクラスは、内部実装の一部となる、必要な他のメソッドを自由に持つ必要があります。Start()andメソッドはStop()、契約を履行するために必要なだけです。


インターフェイスが開発者によって変更されていないことを確認したい場合は、リフレクションを使用できます。

MethodInfo[] methods = typeof(IPlugin).GetMethods();

// Check that there are only 2 methods, with the names you desire
Assert.AreEqual(methods.Length, 2);
var allowedMethodNames = new[] {"Start", "Stop"};
if (!methods.All(m => allowedMethodNames.Contains(m.Name)))
{
    // Method not contained in allowed names...
}
于 2013-07-09T19:04:53.090 に答える
3

Use typeof(IPlugin).GetMethods(), and enumerate the resulting list in your unit test.

于 2013-07-09T19:06:30.197 に答える
1

これは単体テストの範囲外です。単体テストとは、単一のパブリック メソッド/プロパティの動作をテストすることです。テストは、テストされた機能の実装の詳細を決して指示するべきではありません。

于 2013-07-09T19:05:31.313 に答える