停止unittest从导入模块运行代码 [英] Stop unittest from running code from import module

查看:24
本文介绍了停止unittest从导入模块运行代码的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

已获取2个文件:

new_project
├── Main.py
└── testing.py

我跑步:

$ cd new_project
$ python -m unittest testing.py

我的整个测试文件是:

import unittest
from Main import Square


class TestSquare(unittest.TestCase):

    def test_init(self):
        self.assertEqual(Square(0,0).center, Point(50,50))
        print("test")

,Square是我的Main.py文件中的第一个类。 Main.py的组成如下:

import sys
import math
import random


def d_print(message):
    print(message, file=sys.stderr)


class Square:
    # on découpe le terrain en square et on les marque avec top right corner of square
    def __init__(self, x, y):
        self.xtr = x
        self.ytr = y
        self.size = 100
        self.explored = False
        self.center = Point(x+50, y+50)

while True:
    # do stuff every turn
    x, y, value = [int(j) for j in input().split()]

While循环内的代码将由游戏模拟器每轮调用。模拟器提供输入。

当我运行unittest命令行时,它实际上在等待输入

如果我删除了导入Main和Square上的TestFixture,则单元测试通过。我尝试了几种配置,但在没有启动While循环的情况下,我无法为测试导入Square。

因此,当我只从Main.py导入一个类时,它仍然在类之外运行代码。我简直想不起来了。下面是指向导入机制的链接,我不明白它为什么要运行代码以及如何防止它https://docs.python.org/3/reference/import.html

由于游戏模拟不在我的控制范围内,因此我无法对Main.py的编写方式进行太多更改。我唯一的想法是将循环和类拆分到两个文件中,用于开发和测试;提交时,我必须将文件连接回一个文件。

所以(感谢您到目前为止的阅读;):

  • 为什么单元测试/导入以这种方式工作?
  • 有没有办法解决这个问题?(我现在正在尝试拆分文件的想法,将向您报告)

推荐答案

为了避免循环,当文件作为模块导入时,请这样写:

if __name__ == "__main__":
    while True:
        # do stuff every turn
        x, y, value = [int(j) for j in input().split()]

答案很简单,当您导入模块时,将执行该文件上的代码,这将导致input()上的循环运行和执行被阻止。有关其工作原理的更多详细信息,请read this answer with a detailed explanation

这篇关于停止unittest从导入模块运行代码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆