gpt4 book ai didi

java - 具有复杂参数的单元测试

转载 作者:搜寻专家 更新时间:2023-10-31 19:57:02 24 4
gpt4 key购买 nike

假设我有一个方法:

someMethod(X anObject)

其中 X 是一种极其复杂的对象类型。我的意思是,这不是一个可以轻易即时实例化的东西。我需要以某种方式对 someMethod 进行单元测试,但我不能如此简单地创建一个 X 对象作为参数放入。

所以我首先想到尝试模拟对象,但我遇到的问题是 someMethod 函数调用了 anObject 的许多方法,这意味着被模拟的这个 X 对象有大量需要调用的函数,因此需要模拟预期。更糟糕的是,这些被调用的 X 对象方法返回更多的 X 对象,这意味着我必须模拟对象,期望模拟方法调用,返回更多模拟对象。

关于这个场景,我有几个问题,因为我是单元测试概念的新手:

  1. 撇开冗长的单元测试方法不谈,我发现我的单元测试不仅要测试方法是否有效,还要指定实现(因为我基本上指定了大部分被调用的代码方法本身与模拟预期)。这是一个问题吗(主要是针对单元测试本身的概念)?
  2. 有什么方法可以解决这个问题,即使只是为了让我的单元测试方法更简洁、更易于维护?
  3. 我考虑过从其他地方获取一个序列化的 X 对象,保存它,然后每当我调用我的单元测试方法时,我将反序列化我的 X 对象并将其作为参数运行。这只是我想到的一些随机想法;真的有人这样做吗?

如果有人想知道我到底在做什么,我正在使用 IDebugContextListener用于在 Java 调试器的给定步骤中获取有关堆栈帧数据的调试信息的接口(interface)。我指的“X”是由接口(interface) here 定义的对象。 ,包括 IValue、IVariable 和 IStackframe 等对象。所有这些变量都是在运行时由 Java 调试器提供给我的。

最佳答案

您遇到这种困难的事实是设计问题的征兆。当某些东西难以测试时,重构直到它不难测试。

如果一个对象需要调用另一个对象的太多方法,那么封装很差,责任也很差。据推测,没有遵循单一职责原则。如果代码调用返回对象的方法,并且必须依次调用这些方法,则不符合 Demeter 法则。

关于java - 具有复杂参数的单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11822912/

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