我有2个模型,相册和图片以及功能album_reorder
,它接收图片ID列表并相应地改变权重。这工作正常,但我正在尝试为函数编写测试,例如:
Class ReposTests(unittest.TestCase):
def test_album_reorder__fail__not_owned(self):
# Create a test user, album and pictures.
user = self.create_test_user()
# create_default_album() generates an Album along with 6 default Picture records.
create_default_album(user)
album = get_first_album(user.profile)
pictures = Picture.objects.filter(album=album)
# Get all picture IDs into a list and record each pictures existing weight.
picture_ids = []
picture_weights = {}
for picture in pictures:
picture_ids.append(picture.id)
print "%s:%s:%s" % (album.id, picture.id, picture.weight)
picture_weights[picture.id] = picture.weight
# Create another test user, album and pictures.
user2 = self.create_test_user()
create_default_album(user2)
album2 = get_first_album(user2.profile)
pictures2 = Picture.objects.filter(album=album2)
# Add a Picture ID from a different user to test the restriction that an album cannot be re-ordered if any pictures do not belong to the specified user.
picture_ids.append(pictures2[0].id)
print "%s:%s:%s" % (album2.id, pictures2[0].id, pictures2[0].weight)
picture_weights[pictures[2].id] = pictures2[0].weight
# Shuffle all picture IDs
random = Random()
while pictures[0].id == picture_ids[0]:
random.shuffle(picture_ids)
# Reorder picture IDs according to shuffled ID list, however this should fail due to the ownership check.
album_reorder(user, picture_ids)
print picture_ids
print picture_weights
# Check each
for picture_id in picture_ids:
self.assertEqual(picture_weights[picture_id], Picture.objects.get(id=picture_id).weight)
现在问题似乎与构造picture_weights
dict的方式有关。由于以下两行输出:
# Loop output: (album.id, picture.id, picture.weight)
# 1346:5699:0
# 1346:5700:1
# 1346:5701:2
# 1346:5702:3
# 1346:5703:4
# 1346:5704:5
# 1347:5705:0
print picture_ids
# Outputs: [5700L, 5703L, 5702L, 5699L, 5704L, 5705L, 5701L]
print picture_weights
# Outputs: {5699L: 0L, 5700L: 1L, 5701L: 0L, 5702L: 3L, 5703L: 4L, 5704L: 5L}
请注意,picture_ids
长度为7个元素,正如预期的那样,picture_weights
只有6个元素,并且权重与循环的输出不匹配。 5705
中缺少第二个用户图片picture_weights
,但picture_weights
中的一个已被分配了0L
的错误权重。
我根本没有dict的经验,我只是试图运用我对PHP关联数组的知识,所以我假设我的知识存在差距。谢谢你的建议!
答案 0 :(得分:3)
这些行中的列表和字典分歧:
# Add a Picture ID from a different user to test the restriction that an album cannot be re-ordered if any pictures do not belong to the specified user.
picture_ids.append(pictures2[0].id)
print "%s:%s:%s" % (album2.id, pictures2[0].id, pictures2[0].weight)
picture_weights[pictures[2].id] = pictures2[0].weight
注意你是如何使用pictures[2].id
的,5701L
(这也就是字典中特定键重量变化的原因)。你可能意味着该行:
picture_weights[pictures2[0].id] = pictures2[0].weight