请看下面我的情景,
#include<stdio.h>
double myAtoi(char *str);
void main()
{
double n;
double m;
char* a="12345678912";
char* b="34";
n=myAtoi(a);
//m=atoi(b);
printf("\nconversion is : %d",(n));
}
double myAtoi(char *str)
{
printf("\nstr : %s",str);
long res = 0; // Initialize result
long i ;
// Iterate through all characters of input string and update result
for (i = 0; str[i] != '\0'; ++i)
{
res = res*10 + str[i] - '0';
printf("\n res : %d",res);
//x=res;
}
return res;
}
我不确定对这种方法进行单元测试的最佳方法。也许我可以使用反射,但我不认为这是一种明智的方式。有人有想法吗?
答案 0 :(得分:0)
想想你真正对测试感兴趣的是什么。对于GetExpectedTech
方法,您传入一个字符串并返回Tech
。可能是传入的字符串与返回的Tech
之间存在某种联系。这就是你应该测试的东西(可能不是null,包含期望值等)。
如果方法的副作用是Tech
存储在类的字段中,那么你必须出于某种原因(如果不是你不应该这样做)。目前在您发布的代码中没有理由,但最可能的原因似乎是类中有其他方法使用Tech
或返回它。在这一点上,您可以链接这两种方法,以创建两种方法之间的关系。如果方法之间的关系是您尝试测试的一部分,那么在SUT上调用多个方法没有任何问题,所以你可以这样做:
var expectedTech = sut.GetExpectedTech(someString);
var otherTech = sut.DoSomethingElse(someOtherParams);
Assert.AreEqual(expectedTech, otherTech);
如果它是你需要为其他方法测试的Tech
的交互,那么你可能需要查看创建模式,这样你就可以将一个Mock注入你的SUT,但不知道还有什么你的班级很难说这是否有必要。
正如您所说,您可以使用反射访问该成员,或PrivateObject但是,这是正确的事情的场景数量相对较少,所以如果您需要这样做,它可以表明你的班级需要重构。