如何測試私有靜態泛型方法?內部對我的測試項目是可見的。如何測試這些方法?在C#中測試私有靜態泛型方法
internal class Foo {
// Non-static. This works!
private T TestThisMethod1<T>(T value) {
Console.WriteLine("Called TestThisMethod1");
return value;
}
// Static. Can't get this to work!
private static T TestThisMethod2<T>(T value) {
Console.WriteLine("Called TestThisMethod2");
return value;
}
// Static. Can't get this to work!
private static void TestThisMethod3<T>(T value) {
Console.WriteLine("Called TestThisMethod3");
}
// Static. Can't get this to work!
private static void TestThisMethod4<T, T2>(T value, T2 value2) {
Console.WriteLine("Called TestThisMethod4");
}
}
第一個例子有效。這不是靜態的。這是https://msdn.microsoft.com/en-us/library/bb546207.aspx的示例。
[TestMethod]
public void PrivateStaticGenericMethodTest() {
int value = 40;
var foo = new Foo();
// This works. It's not static though.
PrivateObject privateObject = new PrivateObject(foo);
int result1 = (int)privateObject.Invoke("TestThisMethod1", new Type[] { typeof(int) }, new Object[] { value }, new Type[] { typeof(int) });
// Fails
int result2 = (int)privateObject.Invoke("TestThisMethod2", BindingFlags.Static | BindingFlags.NonPublic, new Type[] { typeof(int) }, new Object[] { value }, new Type[] { typeof(int) });
// Fails
PrivateType privateType = new PrivateType(typeof(Foo));
int result2_1 = (int)privateType.InvokeStatic("TestThisMethod2", new Type[] { typeof(int) }, new Object[] { value }, new Type[] { typeof(int) });
// Fails
int result2_2 = (int)privateType.InvokeStatic("TestThisMethod2", BindingFlags.Static | BindingFlags.NonPublic, new Type[] { typeof(int) }, new Object[] { value }, new Type[] { typeof(int) });
// Stopping here. I can't even get TestThisMethod2 to work...
}
我的寫作目的是不是真的質疑或辯論測試私有方法的優點:那受到已經爭論了個遍。更重要的是,我寫這個問題的目的是說:「應該可以用PrivateObject或PrivateType來做到這一點,那麼,怎麼做呢?」
你有沒有你的私有靜態方法的消費者?如果不是,那爲什麼要測試它的行爲? –
一般私人方法通過調用它們的公共方法進行測試 –
的確,我通常遵循「僅測試公共方法」的規範。這些天,如果我可以避免的話,我討厭公開使用任何東西。這種方法深埋在代碼中。我應該能夠用PrivateObject或PrivateType隔離測試此方法。 – clarionprogrammer