当前位置: 首页 > 知识库问答 >
问题:

TDD单元测试可以调用其他函数吗?

和嘉澍
2023-03-14

我使用这本优秀的书(Python中的测试驱动开发)发现了Python上的TDD,到目前为止,我很喜欢它。

但是,我有一个关于创建单元测试的方式的问题。

让我们想象一下这样的事情:

def A(MyObject):
    # Do some complex modification on MyObject
    return modified_MyObject

def B(modified_MyObject):
    # Do some stuff on modified_MyObject
    return something

如果我想测试A,它会非常简单:我将在我的单元测试中手动创建一个对象,并测试它,类似于这样:

class TestObject(unittest.TestCase):

    def testA(self):
        testA = MyObject()
        modified_MyObject = A(testA)
        # assert MyObject has been modified

但是,如何测试B?我可以看到这样的方式:

  • 手动创建modified_MyObject并用它来测试B
  • 在testB()中使用A()创建modified_MyObject

第一种方法允许testB不依赖于A(),但是我将创建一个“常量”对象,这显然是TDD中需要避免的。此外,如果我在代码中更改了一些内容,我也必须修改我创建的对象。最后,如果对我的对象进行的修改意味着数百个步骤/数据,那么手工创建对象可能会非常痛苦。

第二种方法是在A()之间建立依赖关系

    def testB(self):
        testA = MyObject()
        testModifiedObject = A(testA)
        result = B(testModifiedObject)
        # assert that B return a correct result.

一般问题可能是:“在TDD中,如果代码函数使用其他函数,我可以在单元测试中也使用它们吗?”

谢谢你的帮助,

共有1个答案

宰父衡
2023-03-14

我觉得你的问题太笼统了,你能举个具体的例子吗?答案会因对象和关系的不同而有所不同。

然而,一般来说,是的,你可以使用其他函数(只要这些函数有自己的测试)。通常,您会在setUp方法中执行此操作:

def setUp(self):
    self.modified_object = A(object())

def testB(self):
    result = B(self.modified_object)
    # assert something

有时,尽管您可能需要一个模拟对象,或者只是将一些虚拟对象传递给B。这一切都取决于。

顺便说一句,你知道由对象()创建的对象是不可变的,你不能修改它吗?

 类似资料:
  • 虽然这个测试可能是微不足道的,但它说明了单元测试的基本元素。 我们使用解释这个测试是什么,我们使用来断言我们从测试中得到什么样的结果。 这些是用户定义的,因此在这些消息中描述性和准确性是一个好主意。 诸如“应该工作”或“测试服务”之类的消息不能真正解释发生了什么,并且在整个应用程序上运行多个测试时可能会产生混淆。 我们的实际测试是基本的,我们使用制定一个场景,并使用来断言我们从该场景预期的结果条件

  • 问题内容: 我有一个实现一些WKNavigationDelegate函数的UIViewController,并且我想对这些函数中的逻辑进行单元测试。这是一个例子: 我希望我的单元测试确保基于WKNavigationAction的request.url用正确的WKNavigationActionPolicy调用DecisionHandler。 但是,我不知道如何测试此功能。当我运行测试项目时,在We

  • 假设我有两个html文件具有如下功能: 我想从a.html直接指向B.html,然后直接调用函数B。我怎样才能做到?。因为我想要将JSON字符串从函数A传递到函数B,而不是使用window.onload()或$(document).ready()。 我将我的JSON字符串存储到本地存储,并将用户引导到b.html。然后函数B将读取本地存储并直接处理数据。

  • 我的任务是为另一个团队编写的AngularJS代码编写单元测试,该团队没有编写任何测试 他们已经编写了以下函数,但我不知道如何测试它 我需要测试每个函数是否被调用,而不是担心它们做什么,因为我将分别测试它们,只是它们被调用。 调用populateCallAlertOnEditCall时,需要返回空数组或其中包含某些项的数组 调用openAlertModalInstance时,它需要返回未定义的或传

  • 问题内容: 我有一个Python 2.7方法,有时会调用 当满足正确的条件时,是否可以进行单元测试以验证是否调用了此代码行? 问题答案: 是。加注,因此您可以使用以下命令进行检查: 的实例具有设置为建议的退出状态的属性,并且返回的上下文管理器将捕获的异常实例设置为,因此检查退出状态很容易: sys.exit文档: 从Python退出。这是通过引发异常来实现的…可以在外部级别拦截出口尝试。