我有一个测试用例,我想通过从数据库中获取数据来检查分配房间的匈牙利算法。因此,我在setUp
方法中创建了几个对象来填充一些数据。但是,在执行测试时,它们会失败(本质上,setUp
失败),堆栈跟踪如下:
======================================================================
ERROR: test_hungarian_on_users (allocation.tests.TestHungarian)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/parthshukla/roomer/allocation/tests.py", line 68, in setUp
code='MA-302'
File "/Users/parthshukla/roomer/venv/lib/python2.7/site-packages/django/db/models/manager.py", line 122, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/Users/parthshukla/roomer/venv/lib/python2.7/site-packages/django/db/models/query.py", line 401, in create
obj.save(force_insert=True, using=self.db)
File "/Users/parthshukla/roomer/roomer/models.py", line 297, in save
super(Room, self).save(kwargs)
File "/Users/parthshukla/roomer/venv/lib/python2.7/site-packages/django/db/models/base.py", line 708, in save
force_update=force_update, update_fields=update_fields)
File "/Users/parthshukla/roomer/venv/lib/python2.7/site-packages/django/db/models/base.py", line 736, in save_base
updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)
File "/Users/parthshukla/roomer/venv/lib/python2.7/site-packages/django/db/models/base.py", line 820, in _save_table
result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)
File "/Users/parthshukla/roomer/venv/lib/python2.7/site-packages/django/db/models/base.py", line 859, in _do_insert
using=using, raw=raw)
File "/Users/parthshukla/roomer/venv/lib/python2.7/site-packages/django/db/models/manager.py", line 122, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/Users/parthshukla/roomer/venv/lib/python2.7/site-packages/django/db/models/query.py", line 1039, in _insert
return query.get_compiler(using=using).execute_sql(return_id)
File "/Users/parthshukla/roomer/venv/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 1060, in execute_sql
cursor.execute(sql, params)
File "/Users/parthshukla/roomer/venv/lib/python2.7/site-packages/django/db/backends/utils.py", line 64, in execute
return self.cursor.execute(sql, params)
File "/Users/parthshukla/roomer/venv/lib/python2.7/site-packages/django/db/utils.py", line 95, in __exit__
six.reraise(dj_exc_type, dj_exc_value, traceback)
File "/Users/parthshukla/roomer/venv/lib/python2.7/site-packages/django/db/backends/utils.py", line 64, in execute
return self.cursor.execute(sql, params)
File "/Users/parthshukla/roomer/venv/lib/python2.7/site-packages/django/db/backends/sqlite3/base.py", line 323, in execute
return Database.Cursor.execute(self, query, params)
IntegrityError: UNIQUE constraint failed: roomer_room.id
----------------------------------------------------------------------
这个错误似乎源于对房客的完整性约束_房间.id(django-generated-UUID)表示存在具有该ID的房间。但是,错误源于第68行(对Room.objects.create()
的第一次调用)前面的Room.objects.all()
返回一个空数组。因此,Room表中没有其他对象是有意义的,因为django测试在生成测试用例时创建一个新数据库,并在分解时销毁它。以下是测试用例以供参考。在
所以,问题是
Room.objects.create()
没有创建主键。手动创建一个主键可以解决这个问题。在相关问题 更多 >
编程相关推荐