Python 为什么我的单元测试在结果看来失败了;“正确”;对我来说?
我正在努力学习python。我从这个单元测试开始:Python 为什么我的单元测试在结果看来失败了;“正确”;对我来说?,python,Python,我正在努力学习python。我从这个单元测试开始: import unittest from rna_transcription import to_rna class RNATranscriptionTests(unittest.TestCase): def test_transcribes_cytosine_to_guanine(self): self.assertEqual(to_rna('C'), 'G') if __name__ == '__main__'
import unittest
from rna_transcription import to_rna
class RNATranscriptionTests(unittest.TestCase):
def test_transcribes_cytosine_to_guanine(self):
self.assertEqual(to_rna('C'), 'G')
if __name__ == '__main__':
unittest.main()
我这样写我的方法:
def to_rna(dna_strand):
rna_strand = []
for x in dna_strand:
print('looking at:', x)
if x == 'C':
rna_strand.append('G')
return rna_strand
当我运行单元测试时,它失败并出现以下错误:
AssertionError: ['G'] != 'G'
我不确定这里出了什么问题。我没有得到输出。在我看来,G与G相似,不同的是它的书写方式不同。我做错了什么?
['G']
与'G'
不同。前者是一个列表
,后者是一个str
。列表永远不能等于字符串
但是,您的测试是正确的,因为它指出您的函数的行为不是预期的。如果您想让它返回一个字符串,您需要它看起来像这样
def to_rna(dna_strand):
rna_strand = ''
for x in dna_strand:
print('looking at:', x)
# if I recall my biology class correctly
rna_strand += 'G' if x == 'C' else x
return rna_strand
请注意,有更有效的方法可以做到这一点,但是为了示例,我没有对代码进行太多的更新。你真的可以这么做
def to_rna(dna_strand):
return dna_strand.replace('C', 'G')
左:
['G']
是一个包含一个元素的列表:字符串'G'
。右:这只是字符串'G'
再次查看Matt['G']!='G'
我推荐Biopyton用于这个东西,顺便说一句,断言的左侧是一个单元素Pythonlist
,而右侧是一个字符串(str
)。列表不能等于字符串<代码>..==['C']应该可以。顺便说一句,你的方法会返回一个列表。永远不要说永远<代码>类列表(列表):def\uuuu eq\uuuu(self,uu):返回True<代码>列表('G')=='G'\uuuuuu内置的.list
,所以仍然正确。即使有实际的黑客可以做真正改变内置类谢谢你。这就是我犯错误的明显例子。