unit-testing - 如何在 BDD/TDD 中对私有(private)方法进行单元测试?

标签 unit-testing tdd bdd

我正在尝试根据行为驱动开发进行编程,
它指出,不写任何代码都不应写
首先失败的单元测试。
我的问题:

  • 如何将 BDD 与私有(private)方法一起使用,以及
  • 如何对私有(private)方法进行单元测试?

  • 有没有比以下更好的解决方案:
  • 先公开私有(private)方法,然后再私有(private)化
    当我编写使用这些私有(private)方法的公共(public)方法时;
  • 在 C# 中将所有私有(private)方法设为内部并使用 InternalsVisibleTo
    属性。
  • 最佳答案

    我已经与它斗争了1个多月,但找到了答案:

            var objectOfPrivateMethod = new ObjectOfPrivateMethod(); //yes here is contructor
            object[] arguments = {  }; // here as Object you provide arguments
    
            var extractedPrivateMethod = typeof(ObjectOfPrivateMethod).GetMethod("Name_Of_Private_Method", BindingFlags.NonPublic|BindingFlags.Static); //if fails returns null. delete flag static if it's not static. Returns your method as an object.
            Assert.AreNotEqual(null, extractedPrivateMethod, "Mathod does not exist"); // good to catch if even exists.
    
            object result = extractedPrivateMethod.Invoke(null, arguments); // here as object you'll get return value of your function. change null for object of class where is method, if your method is not static 
    

    就这样。

    关于unit-testing - 如何在 BDD/TDD 中对私有(private)方法进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1583363/

    相关文章:

    java - Junit 和 EasyMock 理解澄清

    java - Mockito 的when() 没有 stub 父类(super class)的方法

    mysql - 如何在 Rails 中预先填充的数据库上运行测试?

    php - 单元测试 : Explain the usefulness of Mock Objects

    c# - 集成测试和 TDD

    javascript - 以 BDD 风格在 Javascript 中按内容比较两个数组

    c# - 如何使用来自 Rider 或 VS 2017 的 NUnit、xUnit 或 MSTest 测试 .NET Standard 2 库?

    javascript - 一年后,仍然在单元测试、集成测试和端到端测试中挣扎

    ruby - 如何使用 cucumber 在场景之间共享状态

    python - 我可以将步骤定义放在一个不是 "steps"的文件夹中吗?