2017-09-16 106 views
1

我有一个测试问题。当我运行一些测试时,我分别启动,他们通过。当所有在一起,然后失败。与所有测试用例一起运行时,Django测试失败

​​

我读到这个问题在这里 why would a django test fail only when the full test suite is run? 并试图平息验证在串行文件,如下所示

@mock.patch(
    'apps.buildings.api.serializers.years_range_is_not_future', new=fake_years_range_is_not_future 
) 
def test_create_building_with_validation_of_foundation_period(self): 
.............................................................. 

但后来我得到一个难以理解我的异常

Error 
Traceback (most recent call last): 
    File "/usr/lib/python3.5/unittest/mock.py", line 1049, in _dot_lookup 
    return getattr(thing, comp) 
AttributeError: module 'apps.buildings.api' has no attribute 'serializers' 

During handling of the above exception, another exception occurred: 

Traceback (most recent call last): 
    File "/usr/lib/python3.5/unittest/mock.py", line 1149, in patched 
    arg = patching.__enter__() 
    File "/usr/lib/python3.5/unittest/mock.py", line 1205, in __enter__ 
    self.target = self.getter() 
    File "/usr/lib/python3.5/unittest/mock.py", line 1375, in <lambda> 
    getter = lambda: _importer(target) 
    File "/usr/lib/python3.5/unittest/mock.py", line 1062, in _importer 
    thing = _dot_lookup(thing, comp, import_path) 
    File "/usr/lib/python3.5/unittest/mock.py", line 1051, in _dot_lookup 
    __import__(import_path) 
    File "/home/env/project/apps/buildings/api/serializers.py", line 12, in <module> 
    from apps.communities.api.serializers import CommunityBriefSerializer 
    File "/home/env/project/apps/communities/api/serializers.py", line 297, in <module> 
    class CommunityOfficialRequestBuildingSerializer(BaseCommunityOfficialRequestSerializer): 
    File "/home/rp/env/project/apps/communities/api/serializers.py", line 299, in CommunityOfficialRequestBuildingSerializer 
    from apps.buildings.api.serializers import BuildingBriefSerializer 
ImportError: cannot import name 'BuildingBriefSerializer' 

帮助请理解我在做什么错

项目结构(__init__.py文件未列出)

project 
     |__apps 
      |__communities 
      |    |_api 
      |     |_serializers.py 
      | 
      |__buildings 
      |   |_api 
      |   | |_serializers.py 
      |   | 
      |   |_tests 
      |     |_test.py 
      | 
      |_abstract 
         |_validators.py 
+0

是否有'/ apps/communities/api/serializers.py'丢失?有没有'__init __。py'文件? –

+0

__init__.py文件位于建筑物和api文件夹中..../apps/communities/api/serializers.py存在,__init__.py文件位于社区和社区/ api/.... –

回答

0

见此,

Traceback (most recent call last): 
    File "/home/rp/env/project/apps/communities/api/serializers.py", line 299, in CommunityOfficialRequestBuildingSerializer 
    from apps.buildings.api.serializers import BuildingBriefSerializer 

意味着你的import语句是classdef或一些其他的语句中。

也许你在嘲笑apps.buildings.api.serializers后执行import语句。如果您将此导入移动到文件顶部,那么BuildingBriefSerializer可能会在apps.buildings.api.serializers被嘲笑之前变为可用,并且您的测试将通过。 这也可以解释为什么测试运行时,当你单独运行它们。

+0

此导入应该在类以避免循环导入...我通过patch中的new_callable属性走过了这个排除,但是测试仍然失败... –

相关问题