我已经开始为我的 Django 应用程序编写一些测试,但我不确定如何最好地构建代码。
假设我有一个注册页面和一个仅供登录用户使用的页面。 我的第一个计划是让较早的方法执行注册,而较晚的方法使用该登录来测试页面:
def test_register_page(self):
//send request to register page and check user has been registered correctly
def test_restricted_page(self):
c = Client();
c.login("someUser","pass");
c.post("/someRestrictedPage/");
//Test response
然而,这意味着现在我的一个测试依赖于另一个。
我看到的替代方案是在 setUp() 中调用注册,但这仍然意味着受限页面测试依赖于注册页面的工作。
我可以尝试在设置中手动创建一个新用户,但我也不喜欢,因为这不是在测试系统创建的用户。
测试这种情况的常用模式是什么?
最佳答案
您正试图在一个测试用例中混合使用许多不同的功能。一个干净的设计应该有一个测试用例
- 用于用户注册和
- 一个是为了风景。
让它们相互依赖会在它们之间引入很多依赖关系——而且——如果测试失败,错误将更难调试。注册测试的成功应该通过正确创建用户实例来确定(因此检查用户的必要属性等)而不是通过能够在某个页面上登录来确定。因此,您需要为 View 测试用例设置一个“正确的”用户实例。这看起来可能比必要的要复杂一些,但它将使以后的维护变得容易得多。 您尝试做的更像是集成测试,它测试整个系统,但在此之前您应该将系统拆分为功能单元 并对该单元进行单元测试! 单个测试越小且定义明确,它们的维护和调试就越容易。
关于Django 测试依赖于其他页面/行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9719024/