给出以下函数RhymeOrNot
,其中包含三个参数:一个文件定义为字符串,第一个单词定义为字符串,第二个单词定义为字符串。此函数将返回一个布尔值,指示是否押韵。如果最后一个元音和后面的每个单词都相同,则一个单词押韵和另一个单词押韵。两个单词都必须在包含单词及其发音的字典的文件中。如果单词或文件中都没有,则返回false。
样本文件看起来与此类似:
PHOTOGRAPH F OW1 T AH0 G R AE2 F
STAFF S T AE1 F
这是Python中的单元测试,用于测试功能
class TestRhyme(object):
def Test(self):
assert RhymeOrNot("dictionary.txt", "CAT", "HAT") == True
assert RhymeOrNot("dictionary.txt", "PHOTOGRAPH", "STAFF") == True
assert RhymeOrNot("dictionary.txt", "TRAIN", "SUSTAIN") == True
assert RhymeOrNot("dictionary.txt", "GIRL", "BOY") == False
assert RhymeOrNot("dictionary.txt", "START", "HEART") == True
assert RhymeOrNot("dictionary.txt", "BERRY", "BUILD") == False
assert RhymeOrNot("dictionary.txt", "CLASS", "PASS") == True
已更新:
class TestRhyme(object):
def Test(self):
assert RhymeOrNot("dictionary.txt", "CAT", "HAT") == True
assert RhymeOrNot("dictionary.txt", "PHOTOGRAPH", "STAFF") == True
assert RhymeOrNot("dictionary.txt", "TRAIN", "SUSTAIN") == True
assert RhymeOrNot("dictionary.txt", "GIRL", "BOY") == False
assert RhymeOrNot("dictionary.txt", "START", "HEART") == True
assert RhymeOrNot("dictionary.txt", "BERRY", "BUILD") == False
assert RhymeOrNot("dictionary.txt", "CLASS", "PASS") == True
assert RhymeOrNot("dictionary.txt", "", "") == False
assert RhymeOrNot("dictionary.txt", "", "HAPPY") == False
assert RhymeOrNot("dictionary.txt", "HARRYPOTTER", "BTW") == False
assert RhymeOrNot("dictionary.txt", "AIRPLANE", "") == False
assert RhymeOrNot("dictionary.txt", "ABCDE", "FGHJI") == False
assert RhymeOrNot("dictionary.txt", "air", "") == False
assert RhymeOrNot("dictionary.txt", "", "sofa") == False
assert RhymeOrNot("dictionary.txt", "train", "fly") == False
assert RhymeOrNot("dictionary.txt", "chair", "declare") == True
assert RhymeOrNot("dictionary.txt", "slam", "ham") == True
assert RhymeOrNot("dictionary.txt", "StAiR", "PaIr") == True
assert RhymeOrNot("dictionary.txt", "pen", "hen") == True
assert RhymeOrNot("", "pen", "hen") == FileNotFoundError
assert RhymeOrNot("def", "pen", "hen") == FileNotFoundError
我可以在单元测试中加入其他哪些测试用例?我想测试功能RhymeOrNot
之后的所有可能的测试用例。
答案 0 :(得分:2)
这些都是“幸福之路”的考验。他们都在正常处理时进行测试。您需要对出现问题时会发生的情况进行一些测试。这些都应该抛出有意义的异常,以使用户知道发生了什么。进站,出错误。
这些话...
AE0
和AE1
韵吗? (并明确说明这就是您要测试的内容)字典...
dictionary.txt
无法打开怎么办?使用coverage analysis tool检查您的测试是否接触到代码的每一行。您错过的任何线路都需要测试。
测试是第一次真正使用许多接口,这是查找基本接口问题的好时机。您可能会发现为每种情况生成一个新文件都很烦人。这表明RhymeOrNot
是不灵活的。它一起进行了三个单独的操作:读取文件,解析文件,检查韵律。他们应该三人分开。
您可以改为使用RhymingDictionary
对象来存储已解析的字典。可以通过多种方式对其进行初始化:从文件,从任何IO流,一次生成一个单词,等等。所有这些都将是同一解析器方法的包装器。然后,您有一个单独的rhyme_or_not
方法,该方法使用初始化的对象。
将它们分开可以使您更彻底地测试这三个功能中的每一个:读取输入,解析输入,检查韵律。灵活性使您和用户更容易设置词典。通过不必在每次检查押韵时都重新解析可能非常大的字典,从而提高了测试和生产使用的性能。