在单元测试中是一个新功能,我有一个函数不会返回任何东西,并且会从某个特定的数字到另一个随机地生成数字,我读到了关于模拟库的信息,但它仍然让我感到困惑,如何对它进行单元测试< strong>功能。
我要测试的内容
1000
和8876
之间生成数字。1234
,允许该数字,因为它没有重复。但是1123
不允许使用,因为它在不同位置重复了一个数字。这就是while
循环的作用。我尝试阅读类似的问题,例如link 1 link 2,但是我无法连接到这种情况
def num(self):
random = randint(1000, 8876)
random = list(map(int, str(random)))
while random[0] == random[1] or random[0] == random[2] or random[0] == random[3] or random[1] == random[2] or random[1] == random[3] or random[2] == random[3]:
random = randint(1000, 8876)
random = list(map(int, str(random)))
num = ""
self.num = int(num.join(map(str,random)))
答案 0 :(得分:0)
将其分为两部分,一部分生成一个随机数,另一部分检查该数字是否满足您的规则。
类似:
number = generateNumber(1000, 8876) // this is where you do the random generation
verifyNumber(number) // this is another method where you check the rules
//do whatever else after this.
您现在要做的就是测试您的业务规则,您可以在第二种方法中随意添加任何数字,而无需依赖任何随机数。
您不能测试随机性,也没有点测试库方法。通过消除您无法控制的内容来测试您的规则。
答案 1 :(得分:0)
首先,如果您发布代码,请仅发布完整的可执行代码。在您的情况下,tokenize :: String -> [Token]
tokenize str = tokenize' str []
partialToText :: String -> [Token]
partialToText [] = []
partialToText xs = [Text xs]
tokenize' :: String -> String -> [Token]
tokenize' [] partial = partialToText partial
tokenize' ('{':xs) partial =
let splitted = splitPlaceholder xs
placeholderText = Placeholder (head splitted)
rest = head $ tail splitted
nextToken = partialToText partial
in nextToken ++ (placeholderText : tokenize' rest [])
tokenize' (x:xs) partial = tokenize' xs (partial ++ [x])
-- split input to two parts, first is everything till the first '}' (not including)
-- and the second is the rest of the input string
splitPlaceholder :: String -> [String]
-- implementation left as an exercise
被定义了两次,一次是变量,一次是函数。另外,该函数周围没有类主体。
发布完整的代码很重要,因为周围的结构对于答案很重要。对于您而言,我只需要假设包含类的外观,因此答案可能不适用于您的问题。
这是我针对您的特定问题编写单元测试的方式:
self.num