【发布时间】:2019-11-14 07:40:16
【问题描述】:
我想在 C# 中对我的私有方法进行单元测试。由于这些方法是私有的,因此无法从测试环境中访问它们。
【问题讨论】:
-
你可以使用Reflection
标签: c# visual-studio unit-testing unity3d private-methods
我想在 C# 中对我的私有方法进行单元测试。由于这些方法是私有的,因此无法从测试环境中访问它们。
【问题讨论】:
标签: c# visual-studio unit-testing unity3d private-methods
我想办法这样做:
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\PublicAssemblies\ 并将文件 Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll 复制到 Unity 项目中的文件夹中。using Microsoft.VisualStudio.TestTools.UnitTesting;
public class MyClass
{
private static int AddOne(int i)
{
return i += 1;
}
private int SubOne(int i)
{
return i -= 1;
}
}
MyClass myClass = new MyClass();
PrivateType privateTypeMyClass = new PrivateType(myClass.GetType());
int res1 = (int)privateTypeMyClass .InvokeStatic("AddOne", 2);
PrivateObject privateObjectMyClass = new PrivateObject(myClass);
int res2 = (int)privateObjectMyClass.Invoke("AddOne", 2);
obj[] 来传递这些参数。【讨论】:
不建议为private 方法编写单元测试。您应该只为public 方法编写测试,因为调用者仅通过公共方法和属性与您的类交互。在流程中,private 方法由public 方法调用。因此,编写您的测试,以便它们调用 public 方法并通过不同的流程覆盖 private 方法。通过这种方式,您还可以知道您的代码中是否有一些未使用的private 方法可以删除。
【讨论】: