编写源到源编译器的单元测试

时间:2013-08-04 04:35:35

标签: unit-testing tdd code-translation

您如何跨不同语言进行测试?

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

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

2 个答案:

答案 0 :(得分:1)

这与标准应用程序(特别是与数据库接口等等)的TDD实际上没有任何不同。您可以对组成的组件进行单元测试,以使您的应用程序独立运行。然后,对于上面提到的测试,您只需要使用最佳判断来进行仍然允许代码灵活的测试,但仍然可以彻底测试所需的行为。

一个想法是仍然测试结果代码是否正确,但隔离了构建预期输出源代码以进行断言的构建器对象后面的检查。 例如

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

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

答案 1 :(得分:1)

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