【问题标题】:how to test private methods using xunit C#如何使用 xunit C# 测试私有方法
【发布时间】:2022-01-03 21:15:55
【问题描述】:

我正在使用 xUnit 来测试 C# 中的代码。 我有一个问题,当我测试私有方法时,它不起作用,因为该方法不是公共的(其他类无法访问此方法)。

我有一个有私有方法的类:

public class Calculator{
    //...
    private double DegreeToRadian(double angle)
    {
        return Math.PI * angle / 180.0;
    }
    //...
}

在测试中:

public class TestCalculator{

    [Fact]
    public void ConvertDegreeToRadian()
    {
        // Arrange
        Calculator _calculator = new Calculator();
    
        // Act
        double angle = 90;
        double expected = angle * Math.PI / 180;
        double result = _calculator.DegreeToRadian(angle);
    
        // Assert
        Assert.Equal(expected, result);

    }
}

有没有办法在私有方法中进行测试?

【问题讨论】:

  • 通常建议不要这样做,这就是为什么它不容易做到。您要么需要使用反射来调用它,要么以某种方式使其可用,通常是通过将其公开。为什么需要测试它?因为它是私有的,所以它是一个实现细节。
  • @LasseV.Karlsen 是的,我首先想到的是使用公共方法而不是私有方法。顺便说一句,这只是学校的作业。我的老师说我应该实现一个类,其中有一些私有方法,他希望我测试这个类。
  • 在我看来;如果你的老师教你测试私有方法,他要么试图教你这很痛苦,要么反思是痛苦的,或者他在教你错误的东西。您不能轻易测试私有方法是有原因的,建议不要这样做,并且大多数人都试图避免这样做。 (是的,有时必须这样做,但从着火的建筑物中跳跃也是如此,这不是你想要养成的习惯)
  • 更大的问题是为什么计算器有一个private函数来将度数转换为弧度地方。甚至我从 Walmart 购买的 1 美元计算器也允许我这样做
  • @Matato 公开私有方法只是为了让它们可测试也是不推荐的。

标签: c# testing xunit


【解决方案1】:

您应该测试所有代码,但私有方法会被隐式测试。

也就是说,您的代码会以某种方式影响某些公共方法的输出。

如果没有,则永远不会执行。如果是这样,那么您通过调用公共方法并针对受私有方法影响的输出进行测试来对其进行测试。

该规则的唯一例外是测试内部类,因为它是介于两者之间的可见性选项。

【讨论】:

    猜你喜欢
    • 2016-01-04
    • 1970-01-01
    • 2015-03-13
    • 1970-01-01
    • 2018-02-01
    • 2020-06-27
    • 2019-05-10
    • 1970-01-01
    • 2019-03-10
    相关资源
    最近更新 更多