您如何跨不同语言进行测试?
我的编译器将代码从源语言翻译成目标语言。我想确保在执行(源语言)输入和(目标语言)输出时,它们会产生完全相同的结果。
现在我有一个执行源输入的脚本,通过编译器运行它,执行输出,然后对结果进行字符串比较。感觉不尽如人意(最细微的语义差异会导致测试失败;“1.0”不等于“1”导致测试失败等),那么有没有更好的方法呢?
您如何跨不同语言进行测试?
我的编译器将代码从源语言翻译成目标语言。我想确保在执行(源语言)输入和(目标语言)输出时,它们会产生完全相同的结果。
现在我有一个执行源输入的脚本,通过编译器运行它,执行输出,然后对结果进行字符串比较。感觉不尽如人意(最细微的语义差异会导致测试失败;“1.0”不等于“1”导致测试失败等),那么有没有更好的方法呢?
这与标准应用程序上的 TDD 并没有什么不同(尤其是与数据库接口的应用程序等......)。您可以对组成的组件进行单元测试,以使您的应用程序处于隔离状态。然后对于您上面提到的测试,您只需要使用您的最佳判断来进行测试,该测试仍然允许代码灵活,但仍然可以彻底测试所需的行为。
一种想法是仍然测试正确输出的结果代码,但隔离构建器对象背后的检查,该构建器对象构建预期的输出源代码以进行断言。例如
With(int number)
{
_sourceString += number.ToString(<Assign formatting here>);
Return this;
}
这样,如果您的输出确实发生了变化,您只需在一个构建器方法中更改它们。
您提到的测试模式不是单元测试。您正在测试整个应用程序的行为,所以它是相当黑盒测试。@grrrrrrrrrrrrr 正确地指出单元测试应该测试各个类的各个方法。然后,您可以验证,例如,一小段包含文字“1.0”的代码将被正确地转换为“1.0f”或任何可以被一种方法接受的东西,这种方法完全是一件事(即转换文字或其他东西)。