2013-08-04 87 views
1

如何跨不同语言进行测试?为源代码编译器编写单元测试

我的编译器将代码从源语言转换为目标语言。我想确保在执行(源语言)输入和(目标语言)输出时,它们会产生完全相同的结果。

现在我有一个脚本执行源输入,通过编译器运行它,执行输出,然后字符串比较结果。它感觉不令人满意(语义差异最小会导致测试失败;“1.0”不等于“1”,因此测试失败等),那么有没有更好的方法?

回答

1

这对TDD在标准应用程序(尤其是连接到数据库的接口等)上没有任何区别。您可以对构成的组件进行单元测试,以隔离您的应用程序。然后,对于上面提到的测试,您只需使用您的最佳判断来进行测试,该测试仍然允许代码具有灵活性,但仍能彻底测试所需的行为。

一个想法是仍然会测试所得到的代码是否正确出来,但隔离构建器对象后面的检查,以便构建预期的输出源代码来进行声明。 例如

With(int number) 
    {  
     _sourceString += number.ToString(<Assign formatting here>); 
     Return this; 
    } 

这样,如果您的输出确实发生了变化,您只需在一个构建器方法中更改它们即可。

+0

感谢您的提示。猜测我将不得不考虑以某种方式转换输出。 – user1953221

1

您提到的测试模式不是单元测试。您正在测试整个应用程序的行为,所以它是相当黑盒测试。 @grrrrrrrrrrrrr正确地指出单元测试应该测试各个类的单独方法。然后你可以验证,例如,包含文字“1.0”的一小段代码将被正确地转换为“1.0f”,或者被一种方法正确地转换为“1.0f”(即转换文字或其他东西)。