如何在编写单元测试时访问方法的局部变量

raj*_*ram 1 c# reflection unit-testing scope

鉴于以下代码:

public class Employee
{
    public void CalculateEmpSal(int empId,int salary)
    {      
        // local varibles
        int Basic; 
        int HRA;       

        // Calculate employee salary
        Basic = salry * (0.40);
        HRA = Basic * (0.50);
    }
}
Run Code Online (Sandbox Code Playgroud)

是否可以为CalculateEmpSal可以访问BasicHRA局部变量的方法编写单元测试?我无法使用反射访问这些变量.还有另一种方法可以从我的单元测试中访问它们吗?

for*_*rir 6

你不能......你不应该这样做.

您应该测试由方法引起的副作用/状态更改,而不是低级实现细节.就目前而言,你的方法没有副作用,所以没有什么可以测试的.

如果你改变它以返回有用的东西(可能HRA),那么你需要在方法之外测试一些东西.

public int CalculateEmpSal(int empId,int salary)
{      
    // local varibles
    int Basic; 
    int HRA;       

    // Calculate employee salary
    Basic = salry * (0.40);
    HRA = Basic * (0.50);
    return HRA;
}
Run Code Online (Sandbox Code Playgroud)

如果您只是想检查值,那么您应该使用调试器逐步执行代码.

顺便说一句,你使用浮点数,整数......你确定要这样做吗?

  • @rajasairam这并没有改变你不能改变的事实.当您在方法之外时,变量根本不存在.检查它们的唯一方法是在方法运行时通过调试API,甚至Typemock都不允许你这样做,因为这是一个坏主意.如果你正在计算某些东西,那么它就是有意义的你*必须*用它来做某事.将其传递给另一个方法,将其存储在类成员等中.这些操作是可测试的. (3认同)