【发布时间】: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 公开私有方法只是为了让它们可测试也是不推荐的。