3

これは私が私のシステムから抜け出す必要があるという哲学的な怒りかもしれませんが、一方で私は何か間違ったことをしている可能性があります、もしそうなら教えてください!

私はユニットテストをして、次のようになります。

[TestMethod]
[ExpectedException(typeof(NotImplementedException))]
public void Test_XXXAccess()
{
    ControlPoint.MyObject.XXXAccess;
}

これは、テストが特定のコンテキストで実行されたときに、プロパティXXXAccessが実装されていないことを確認します。このテストでは、コンパイルエラーCS0201が生成されます。「ステートメントとして使用できるのは、代入、呼び出し、インクリメント、デクリメント、および新しいオブジェクト式のみです」これは本番コードのエラーであることに同意しますが、単体テストに適用するのは間違っていると思います。もちろん、コードを次のように書き直すこともできます。

[TestMethod]
[ExpectedException(typeof(NotImplementedException))]
public void Test_XXXAccess()
{
    MyType x = ControlPoint.MyObject.XXXAccess;
}

しかし、これは(私にとっては)エラーをミュートする以外に何もしないように変数に割り当てたため、より正しくないように見えます。

テストを書くためのより良い方法はありますか?

4

1 に答える 1

2

その型にその名前のプロパティがないことを確認したい場合、テストではtypeof(whatever);のリフレクションを使用する必要があります。getter / setterメソッドがスローすることを確認したい場合はNotImplementedException、実際にそのメソッドを呼び出す必要があります。

結局のところ、ゲッターは実装されているかもしれませんが、セッターは実装されていない可能性があります。この場合、プロパティに「メンション」するだけで何をしたいですか?興味のあるコードを実際に呼び出して、何が起こるかについて主張する方がよいでしょう。

興味のあるゲッターであれば、ゲッターメソッドを取得するために熟考することができますが、それだけInvokeで(ローカルを宣言する必要はなく、使用しない)、これははるかに冗長になります解決策としてすでに特定したもの。

于 2012-08-15T14:27:22.997 に答える