单元测试不可返回的函数,该函数随机生成数字

时间:2019-05-26 10:37:22

标签: python-3.x unit-testing mocking

在单元测试中是一个新功能,我有一个函数不会返回任何东西,并且会从某个特定的数字到另一个随机地生成数字,我读到了关于模拟库的信息,但它仍然让我感到困惑,如何对它进行单元测试< strong>功能。

我要测试的内容

  1. 测试是否在10008876之间生成数字。
  2. 用4位数字值检查不同数字的位置彼此不相等。例如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))) 

2 个答案:

答案 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