私は現在、VisualStudioで記述された標準の単体テストを最終的に実行する単体テストフレームワークを作成しています。フレームワークは現在、アクセサーで正しく機能していません。次のテスト方法を検討してください。
[TestMethod()]
public void TestMethod()
{
ExampleMethods_Accessor target = null;
target = new ExampleMethods_Accessor();
target.SomeMethod();
}
この例では、アクセサーはVisualStudioによって生成されています。Visual Studioの単体テスト環境を使用して実行すると、単体テストは完全に正常に機能します。ただし、フレームワーク内からTestMethod()を呼び出したいと思います。「target=new ExampleMethods_Accessor()」の行で、次の例外がスローされます。
「Proband.ExampleMethods_Accessor」の型初期化子は例外をスローしました。
内部例外:
ファイルまたはアセンブリを読み込めませんでした:Proband、Version = 1.0.0.0、Culture = neutral、PublicKeyToken = null .. ..
Microsoftユニットテストフレームワークがユニットテストを呼び出す方法について誰かが考えていますか?TestContextオブジェクトがないことが原因かもしれないと思っていました。私の場合、これは「null」です。Visual Studioで単体テストを開始すると、TestContextオブジェクトには多くの情報が含まれます。正しく初期化する必要があるのでしょうか?どのように初期化する必要がありますか?
すべての助けをありがとう、クリスチャン
編集:
私はアクセサーがどのように機能しているかを実験し続けました。ILSpyを使用して、Proband_Accessor.dllに生成されているコードを確認しました。例外の原因となっている命令は次のとおりです。
SomeClass_Accessor.m_privateType = new PrivateType("Probant, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null", "Probant.SomeClass");
ユニットテストコードを次のように変更しました(テスト用):
[TestMethod()]
[DeploymentItem("Proband.dll")]
public void SomeMethodTest()
{
ExampleMethods_Accessor target = null;
ExampleMethods c = null;
try
{
Assembly.Load("Proband, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"); // this works fine
PrivateType tx = new PrivateType(typeof(ExampleMethods)); // this works fine as well (also without loading the assembly)
PrivateType t = new PrivateType("Proband, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null", "Proband.ExampleMethods"); // this causes the exception
c = new ExampleMethods(); // this works fine
target = new ExampleMethods_Accessor(); // this causes the exception as well
}
catch (Exception ex)
{
Console.WriteLine();
}
int actual;
actual = target.SomeMethod();
}
「newPrivateType( "Proband、Version ...."」が機能しない理由がよくわかりません。誰かアイデアはありますか?