3時間以上の欲求不満の後、私は尋ねることにしました。
テストするこの単純なクラスがあります。
public class Organizer {
private static bool Bongo(String p) {
return p != null && p.Length >= 5;
}
private static int ValidateArgs(String[] args) {
return args.Length;
}
}
そして、MSTest を使用して静的メソッドをテストするこのコードがあります。
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
public class OrganizerTest {
[TestMethod]
public void TestBongo() {
PrivateType psOrganizers = new PrivateType(typeof(Organizer));
// This one works fine.
Assert.IsTrue(Convert.ToBoolean(psOrganizers.InvokeStatic("Bongo", "ABCDEFG")));
// Fails with: "System.MissingMethodException: Method 'Organizer.Bongo' not Found.
Assert.IsFalse(Convert.ToBoolean(psOrganizers.InvokeStatic("Bongo", null)));
}
[TestMethod]
public void TestBodo() {
PrivateType psOrganizers = new PrivateType(typeof(Organizer));
String[] fakeArray = new String[] { "Pizza" };
// Fails with: "System.MissingMethodException: Method 'Organizer.ValidateArgs' not Found.
int result1 = Convert.ToInt32(psOrganizers.InvokeStatic("ValidateArgs", fakeArray));
// Fails with: "System.MissingMethodException: Method 'Organizer.ValidateArgs' not Found.
int result2 = Convert.ToInt32(psOrganizers.InvokeStatic("ValidateArgs", "A", "B", "C", "D"));
// Fails with: "System.MissingMethodException: Method 'Organizer.ValidateArgs' not Found.
int result3 = Convert.ToInt32(psOrganizers.InvokeStatic("ValidateArgs", new Object[] { "A", "B", "C", "D" }));
Assert.IsTrue(result1 == 1 && result2 == 4 && result3 == 4);
}
}
TestBongo の最初の Assert を除いて、MissingMethodException が原因で他のすべての Assert が失敗します。多数の InvokeStatic() オーバーロードがあり、コンパイラが期待するものを選択していない可能性があると思われます。
ところで、プライベート メソッドをテストしないように言わないでください。私は議論を求めていません。:)
ありがとうございました。