gpt4 book ai didi

python - 如何使用 TDD 创建现有对象的数据库表示?

转载 作者:搜寻专家 更新时间:2023-10-30 23:15:11 25 4
gpt4 key购买 nike

我已经使用 TDD 在 Python 中开发了一组类。这些对象包含数据字段、函数和彼此的链接。一切功能都按我想要的方式工作。

最终所有这些都应该存储在数据库中,以便在 Django 网络应用程序中使用。

我已经草拟了一些可能的数据库模式来保存相同的信息,但我觉得与开发应用程序其余部分的传统 TDD 方式相比,这是一个“突然的大飞跃”。

所以,现在我想知道,我应该编写哪些测试来强制我以逐步的 TDD 方式将这些对象存储在数据库中?

让这个问题更具体一点,类目前是这样的:

class Connector(object):
def __init__(self, title = None):
self.value = None
self.valid = False
self.title = title
...

class Element(object):
def __init__(self, title = None):
self.title = title
self.input_connectors = []
self.output_connectors = []
self.number_of_runs = 0

def run(self):
...
self.number_of_runs += 1

class Average(Element):
def __init__(self, title = None):
super(OpenCVMean, self).__init__(title = title)
self.src = Connector("source")
self.avg = Connector("average")
self.input_connectors.append(self.src)
self.output_connectors.append(self.avg)

def run(self):
super(Average, self).run()
self.avg.set_value(numpy.average(self.src.value))

我意识到一些数据应该在数据库中,而处理函数不应该。我认为应该有一个表来表示元素的不同“类型/子类”的详细信息,同时还有一个存储实际实例的表。但是,正如我所说,我不知道如何使用 TDD 实现这一目标。

最佳答案

首先,问问自己是否要测试代码或 Django ORM。大多数时候存储和读取都可以。

您需要测试的是验证数据和任何非模型字段的属性。我认为您应该通过在数据库的下一层编写测试来得到一个好的模式。

此外,使用 South或其他一些迁移方式来降低架构更改的成本。这会让您安心。

如果您有多个级别的测试(例如集成测试),检查数据库配置是否完好是有意义的。大多数测试不需要访问数据库。您可以通过模拟模型或一些数据库操作(至少 save())来做到这一点。话虽如此,您可以使用这个简单的测试来检查数据库的写入和读取:

def test_db_access(self):
input = Element(title = 'foo')
input.save()

output = Element.objects.get(title='foo')

self.assertEquals(input, output)

模拟保存:

def save(obj):
obj.id = 1

关于python - 如何使用 TDD 创建现有对象的数据库表示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15283496/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com