Python Django单元测试&x27;其他';声明以期实现覆盖率
我正在为我的Python Django单元测试&x27;其他';声明以期实现覆盖率,python,django,unit-testing,code-coverage,Python,Django,Unit Testing,Code Coverage,我正在为我的界面应用程序运行django测试覆盖率。下面的视图调用了一个WelcomeMessage模型,基本上表示如果该查询集中没有消息,则默认为“欢迎…”,如果有多个“活动”,则显示最近的消息。基本上,当有超过1条活动消息时,如何测试else行 我尝试创建了两个不同的WelcomeMessage实例,其中一个是最近的,但当我运行coverage时,它仍然将else段高亮显示为红色 运行覆盖范围包括: coverage run--source='.'manage.py测试接口 视图: 单元测试
界面
应用程序运行django测试覆盖率。下面的视图调用了一个WelcomeMessage
模型,基本上表示如果该查询集中没有消息,则默认为“欢迎…”,如果有多个“活动”,则显示最近的消息。基本上,当有超过1条活动消息时,如何测试else
行
我尝试创建了两个不同的WelcomeMessage
实例,其中一个是最近的,但当我运行coverage时,它仍然将else
段高亮显示为红色
运行覆盖范围包括:
coverage run--source='.'manage.py测试接口
视图:
单元测试:
def test_indexWelcomeMessage(self):
welcome1 = WelcomeMessage.objects.create(
created_at=datetime(2019, 1, 1),
modified_at=datetime(2019, 1, 1),
active=True,
msg="Welcome message"
)
welcome2 = WelcomeMessage.objects.create(
created_at=datetime.now(),
modified_at=datetime.now(),
active=True,
msg="Recent welcome message"
)
messages = WelcomeMessage.objects.filter(
active=True).order_by('-modified_at')
if len(messages) == 0:
msg = "testing this message"
else:
msg = messages[0]
recentMsgVal = getattr(welcome2, 'msg')
msg = messages[0]
expectedMsgVal = messages.values_list('msg', flat=True).first()
self.assertNotEqual(len(messages), 0)
self.assertEqual(recentMsgVal, expectedMsgVal) # These asserts pass, but no coverage.
Welcome消息模型:
class WelcomeMessage(models.Model):
created_at = models.DateTimeField(
auto_now_add=True, verbose_name='Created')
modified_at = models.DateTimeField(
auto_now=True, verbose_name="Last change")
active = models.BooleanField(default=True)
msg = models.TextField(null=True, verbose_name='Message')
如何编写一个测试,使其覆盖
else
语句?据我所知,您没有直接或间接地调用此测试用例上的index()
方法。为了证明这一点,您可以添加一个调试器(ipdb
,pycharm调试器
-无所谓),或者在else语句上引发一些错误,然后再次运行测试。它应该像以前一样运行
如果你想写测试用例,看看这个例子这个例子
在您的情况下,它应该是这样的:
def test_index_welcome_message(self):
welcome1 = WelcomeMessage.objects.create(
created_at=datetime(2019, 1, 1),
modified_at=datetime(2019, 1, 1),
active=True,
msg="Welcome message"
)
welcome2 = WelcomeMessage.objects.create(
created_at=datetime.now(),
modified_at=datetime.now(),
active=True,
msg="Recent welcome message"
)
messages = WelcomeMessage.objects.filter(
active=True).order_by('-modified_at')
# this needed in case route needs auth
self.client.login(username='user', password='test')
response = self.client.get('/url/to/index/view')
assert response == expected_response
p、 s.
self.client
是django.test.client
的实例,但是检查您的项目BaseTestCase
,您可能已经定义了一个。添加响应=self.client.get(
成功了!我在上面的另一个方法中使用了相同的客户端响应测试代码,我不知道我需要在上面的unittest中使用另一个语句。我想我正在了解这正是测试if/else分支时需要的。谢谢!
def test_index_welcome_message(self):
welcome1 = WelcomeMessage.objects.create(
created_at=datetime(2019, 1, 1),
modified_at=datetime(2019, 1, 1),
active=True,
msg="Welcome message"
)
welcome2 = WelcomeMessage.objects.create(
created_at=datetime.now(),
modified_at=datetime.now(),
active=True,
msg="Recent welcome message"
)
messages = WelcomeMessage.objects.filter(
active=True).order_by('-modified_at')
# this needed in case route needs auth
self.client.login(username='user', password='test')
response = self.client.get('/url/to/index/view')
assert response == expected_response