自动测试是Transcrypt文档中不可或缺的一部分。然而,我正在努力了解它们如何揭示预期的行为。例如: https://github.com/QQuick/Transcrypt/blob/master/transcrypt/development/automated_tests/transcrypt/proxies/init.py
我无法确切地说出正确/预期的答案是什么。如何解释如下的测试?
autoTester.check (b.p, b.q, b.r, b.s)
b.p = 4
b.r = 5
autoTester.check (b.p, b.q, b.r, b.s)
答案 0 :(得分:3)
自动测试在CPython和Transcrypt下运行。将结果加载到浏览器时,结果会自动验证为相同。这被称为"背靠背测试"这是对check
函数的调用。因此Transcrypt的正确行为只是("操作")定义为CPython行为。与大多数脚本语言一样,Python缺乏正式的语义规范。
Transcrypt支持95%的CPython。 Transcrypt的内部结构是Python到JavaScript的编译器,它们完全不同。这特别适用于所谓的魔术方法" CPython(以__开头和结尾的那些),例如,对于运算符重载,其中许多也由Transcrypt支持。自动测试中的所有功能都支持相同的行为,因此他们共同制定了您可以做的事情"在Transcrypt。
您可以按照以下方式自行运行自动测试,例如:对于Transcrypt基本测试:
单击蓝色(或不希望红色)行以查看要比较的代码的结果。应该不足为奇:自动测试所做的一切确实证实了Transcrypt对他们的行为只是CPython行为。
自动测试结果" Hello world"故意错误:
Transcrypt的基本功能自动测试结果:
自动测试的价值是双重的:
当然是像
这样的测试autoTester.check (b.p, b.q, b.r, b.s)
b.p = 4
b.r = 5
autoTester.check (b.p, b.q, b.r, b.s)
虽然需要完全覆盖,但却非常简单。但是例如运算符重载代码如
def __matmul__ (self, other):
result = Matrix (self.nRows, other.nCols)
for iTargetRow in range (result.nRows):
for iTargetCol in range (result.nCols):
for iTerm in range (self.nCols):
result._ [iTargetRow][iTargetCol] += self._ [iTargetRow][iTerm] * other._ [iTerm][iTargetCol]
return result
ISN'吨
库包的代码也可以自动修改,并且使用复杂的数学算法,例如2D FFT(使用复数将图像转换为频率数组,Numscrypt的一部分)这是必要的,以保持像
这样的代码__pragma__ ('opov')
orig2 = num.zeros ((128, 128), 'complex128')
orig2 [32 : 96, 32 : 96] = num.ones ((64, 64), 'complex128')
autoTester.check ('Original samples', num.round (orig2 + delta, 3) [64 : 68, 16 : 112] .tolist (), '<br>')
if transpiled:
timeStartFft = getNow ()
freqs2 = fft.fft2 (orig2)
if transpiled:
timeStopFft = getNow ()
autoTester.check ('Frequencies', num.round (freqs2 + delta, 3) [64 : 68, 16 : 112] .tolist (), '<br>')
if transpiled:
timeStartIfft = getNow ()
reconstr2 = fft.ifft2 (freqs2)
if transpiled:
timeStopIfft = getNow ()
if transpiled:
print ('FFT2 for {} samples took {} ms'.format (orig2.size, timeStopFft - timeStartFft))
print ('IFFT2 for {} samples took {} ms'.format (orig2.size, timeStopIfft - timeStartIfft))
autoTester.check ('Reconstructed samples', num.round (reconstr2 + delta, 3) [64 : 68, 16 : 112] .tolist (), '<br>')
__pragma__ ('noopov')
打破了。因此,每当有人为Transcrypt做出贡献时,他/她都会被鼓励加入自动测试。一个很好的例子是正则表达式模块,它带有相当数量的自动测试。
请注意,自动测试很难帮助您学习Python。有很多教程和书籍,例如&#34; Python in a Nutshell&#34; Alex Martelli,Anna Ravenscroft和Steve Holden。
有关Transcrypts自动测试设施内部工作原理的更多信息,请点击此处:
http://www.transcrypt.org/docs/html/autotesting_transcrypt.html