我试图在一个使用框架Django的项目中遵循TDD方法。我正在创建和测试模型及其功能(保存方法、信号……)和其他依赖模型的高级功能。
我知道单元测试必须尽可能地孤立,但我发现自己使用FactoryBoy为每个测试创建了大量的表和关系,因此我的测试不够强大,因为如果模型中的某些东西发生了变化,很多测试可能会被破坏。
如何避免所有这些依赖,让测试更干净?
没有测试的最佳实践列表,它包含了很多适合您和您正在进行的特定项目的内容。我同意pyriku的说法:
你不应该根据你想测试的方式来设计你的软件
但是,我要补充的是,如果你有一个好的和模块化的软件设计,它应该很容易进行适当的测试。
如果您还需要测试某个前端,或者您的测试需要一些人工交互(比如在执行OAuth Antain时),则可以使用Selenium来填写和提交这些表单。
在您的例子中,要准备与FactoryBoy有关系的对象,您可以尝试覆盖factory._prepare()方法,让我们使用这个简单的django模型来完成:
class Group(models.Model):
name = models.CharField(max_length=128)
members = models.ManyToManyField(User, blank=True, null=True)
# ...
现在,让我们定义一个简单的UserFactory:
class UserFactory(factory.Factory):
FACTORY_FOR = User
first_name = 'Foo'
last_name = factory.Sequence(lambda n: 'Bar%s' % n)
username = factory.LazzyAttribute(lambda obj: '%s.%s' % (obj.first_name, obj.last_name))
现在,假设我想或需要我的工厂生成有5个成员的组,那么GroupFactory应该如下所示
class GroupFactory(factory.Factory):
FACTORY_FOR = Group
name = factory.Sequence(lambda n: 'Test Group %s' % n)
@classmethod
def _prepare(cls, create, **kwargs):
group = super(GroupFactory, cls)._prepare(create, **kwargs)
for _ in range(5):
group.members.add(UserFactory())
return group
希望这对你有帮助,或者至少给你点亮了。在这里,我将留下一些链接,指向与我提到的工具相关的参考资料:
工厂男孩:https://github.com/rbarrois/factory_boy
硒:http://selenium-python.readthedocs.org/en/latest/index.html
和另一条关于测试的有用线索:
在Django中测试“不同层”的最佳实践是什么?
问题内容: 我有一个使用elasticsearch的Django应用。我想拥有100%的代码测试覆盖率,因此我需要测试对Elasticsearch(本地“安装”)的API调用。 所以我的问题是:模拟整个elasticsearch更好还是应该运行elasticserver并检查结果? IMO最好模拟elasticsearch并仅检查python代码(测试是否使用正确的参数调用了所有内容)。 问题答案
问题内容: 我选择的数据库是MongoDB。我正在编写一个数据层API,以从客户端应用程序中抽象实现细节- 也就是说,我实质上是在提供一个公共接口(一个充当IDL的对象)。 我正在以TDD方式测试自己的逻辑。在每个单元测试之前,调用一个方法来创建数据库单例,此后,当测试完成时,将调用一个方法来删除数据库。这有助于促进单元测试之间的独立性。 几乎所有单元测试(即 执行上下文查询 )都需要先进行某种插
我想测试以下骆驼路线。我在网上找到的所有例子都有以文件开头的路由,在我的例子中,我有一个Springbean方法,每隔几分钟就会被调用一次,最后消息被转换并移动到jms以及审计目录。 我对这条路线的写测试毫无头绪。目前我在测试用例中所拥有的是
我正在构建一个android应用程序,它使用Firebase作为后端,并采用模型、视图和演示者架构。然而,Firebase是一种云服务的事实使我的android应用程序中的自动测试变得复杂。到目前为止,我已经构建了大部分身份验证系统,但无法看到如何在我的应用程序中实现Firebase代码的单元测试。在端到端测试方面,我也陷入了困境。 由于测试是任何android应用程序的基础,没有it应用程序开发
问题内容: 我刚开始使用来自PHP背景的PHPUnit测试进行测试。 在PHP中,非常讲道,您需要100%的覆盖率。在Go中,我所读到的关于测试的大多数内容似乎很少,没有诸如挑衅之类的东西。 例如我的小程序: 现在在我的示例中,我会遇到覆盖问题,因为在单元测试中根本没有覆盖main()(应该怎么办?) 而且两个log.Fatal()都没有涉及。 我的问题是我该如何准确地编写测试?我是否以一种不太严
问题内容: 我的公司一直在评估Spring MVC,以确定我们是否应该在下一个项目中使用它。到目前为止,我喜欢我所看到的内容,现在,我正在查看Spring Security模块,以确定是否可以/应该使用它。 我们的安全要求非常基本。用户只需要能够提供用户名和密码即可访问网站的某些部分(例如获取有关其帐户的信息);并且网站上的页面很少(常见问题解答,支持等),应该为匿名用户提供访问权限。 在我创建的