繁体   English   中英

Unity Test Runner 中的单元测试私有方法

[英]Unit Testing Private Methods in Unity Test Runner

我想在 C# 中对我的私有方法进行单元测试。 由于这些方法是私有的,因此无法从测试环境访问它们。

我想办法这样做:

  1. Go to C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\PublicAssemblies\ and copy the file Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll to a folder in your Unity project.
  2. 引用您的.asmdef 文件中的文件,您可以在“Tests”文件夹中找到该文件: 检查员视图
  3. 在您的 c# 测试脚本中,您现在可以using Microsoft.VisualStudio.TestTools.UnitTesting;
  4. 实例化 class 的实例,其中包含测试和创建私有 object 的方法。 如果您要测试的方法是 static,请改为创建私有类型:
    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);
  1. 如果要传递多个参数,可以使用obj[]来传递这些参数。

不建议为private方法编写单元测试。 您应该只为public方法编写测试,因为调用者仅通过公共方法和属性与您的 class 交互。 在流程中, private方法被public方法调用。 因此,编写您的测试,以便它们调用public方法并通过不同的流程覆盖private方法。 通过这种方式,您还可以知道代码中是否有一些可以删除的未使用的private方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM