基本的に、私のテストのいくつかは成功していますが、失敗しているものもあります。 Mr. Skeetの優れた提案では、私は夢中ではないことを確認するための完全なコードサンプルを作成しました。これはコードです:System.MissingMethodExceptionに実行中:PrivateObjectで見つからないメソッド
namespace ClassLibrary
{
using System;
public class Manager
{
private int SampleMethod(int id)
{
return id;
}
}
}
私のテストは、次のとおりです。
namespace UnitTestProject
{
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
[TestClass]
public class UnitTest
{
[TestMethod]
public void TestPasses()
{
var privateInfo = new PrivateObject(new ClassLibrary.Manager());
var actual = privateInfo.Invoke("SampleMethod", 1);
}
[TestMethod]
public void TestErrorsOut()
{
var privateInfo = new PrivateObject(new ClassLibrary.Manager());
var actual = privateInfo.Invoke("SampleMethod", 0);
}
[TestMethod]
public void TestWorksAsWell()
{
var privateInfo = new PrivateObject(new ClassLibrary.Manager());
privateInfo.Invoke("SampleMethod", new object[] { 0 });
}
[TestMethod]
public void TestAlsoErrorsOut()
{
var privateInfo = new PrivateObject(new ClassLibrary.Manager());
var types = new Type[] { typeof(int) };
var actual = privateInfo.Invoke("SampleMethod", types, 0);
}
}
}
最初のテスト(TestPasses())作品。
第二の試験(TestErrorsOut())は以下のエラーで失敗: {「メソッド 『ClassLibrary.Manager.SampleMethod』が見つかりません」}
不可解なことは、エラーが一貫しているが、実際のテストはほぼ同じです。意味がない。私はVS2012 RCとVS2010で同じ結果を試しました。
私が考えることができるのは、 "0"がint以外のものとしてキャストされていることだけです。つまり、SampleMethodのメソッドシグネチャを見つけることができません。私は、私が探している型(TestAlsoErrorsOut())を明示的に渡すために3番目のテストを試みましたが、同じエラーでエラーも出てきました。
アイデア?ありがとう。
編集OBJ代わりのparams OBJ []オーバーロードの[]、それは(テストTestWorksAsWell())に機能を使用してのイアンの提案を使用することにより
を追加します。そして、それはなぜ私がタイプ[]で動作しないparamsメソッドを使用しているので、TestAlsoErrorsOut()が失敗する理由を説明します。したがって、これは修正されています。しかし、なぜ? params obj []は1を渡すときになぜ機能しますか?0ではなく?
あなたは、問題を実証するために短いが、完全なプログラムを表示することができますか?それはlのための1のタイプミスですか? –
なぜプライベートメソッドを単体テストしたいのですか? – Anuraj
@Anuraj - 私はなぜこの記事を引用していますが、これについて議論するフォーラムではないと思います。 http://www.codeproject.com/Articles/9715/How-to-Test-Private-and-Protected-methods-in-NET。 – bryanjonker