2017-09-16 63 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屬性走過了這個排除,但是測試仍然失敗... –

相關問題