我有一个服务,它实际上会返回一个字典,这取决于用户是登录的、匿名的还是通过电子邮件匿名的。我在django-rest api中使用了该服务,并将所有逻辑放在api视图中。现在我想为这个api创建一个单元测试,并想测试以下不同的情况,即
- 如果用户已登录
- 如果用户是匿名的,没有电子邮件
- 如果用户是匿名的电子邮件
即
对于1,如果用户登录,我们将有一个不同的值,对于2,如果用户是匿名的,我们将有另一个不同的值,对于3,如果用户是匿名的,但提供了一封电子邮件,我们将有另一个不同的值
现在在django单元测试中,我如何检查这种不同的情况?
为了更方便,我分享了我实际尝试过的东西(实际上并不完美)
def test_requirement_header_create_api(self, mocked_get_or_save_anonymous_user_email):
mocked_get_or_save_anonymous_user_email.return_value = dict()
client = APIClient(enforce_csrf_checks=True)
logged_in = client.login(username=self.user.email, password=self.user.password)
if logged_in:
self.data = {
"user_id": self.user_id,
"description": self.description,
}
expected_return = {
"user_id": self.user_id,
"description": self.description,
}
elif self.anonymous_user:
self.data = {
"email": self.anonymous_user.email,
"anonymous_user_email_id": self.anonymous_user.id,
"description": self.description,
}
expected_return = {
"id": 2,
"status": self.requirement_status,
"description": self.description,
}
else:
self.data = {
"description": self.description,
"session": self.session,
}
expected_return = {
"description": self.description,
"session": self.session,
}
response = client.post('/api/requirement-header/', self.data, format='json')
self.assertDictEqual(response.data, expected_return)
我只想知道**如何在django单元测试中检查这种情况即
if user is logged in then test something.....
elif user is anonymous then test some another thing.....
事实上,请不要为我的共享代码而烦恼,我需要知道的是how to check my above written situations
,我已经共享了我的代码,让你知道我到目前为止实际尝试了什么来检查这些情况。但我很确定,这不是正确的方式,但很抱歉,我找不到正确的方式。可能是因为我没有在djano中编写api测试,事实上我是第一次编写。
要检查匿名用户,可以使用(如文档中所示)
self.user.is_anonymous()
要检查登录用户,您可以使用(再次,取自文档
self.user.is_authenticated()
也就是说,这些应该是单独的单元测试。单元测试应该很简单,只测试一件事。在一个单元测试中测试这些不同的情况是一种反模式。