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

如何为clone方法catch块编写JUnit

邓赤岩
2023-03-14

我尊敬的java开发者朋友们。我正在尝试测试并覆盖克隆方法的捕获块。我已经浪费了一个星期,但没有找到任何解决方法来弥补这个障碍。请帮帮我。

我的源代码-

public class Data implements Cloneable {

    private String A;

    @Override
    public Object clone() {
        try {
            return super.clone();
        } catch (CloneNotSupportedException e) {
            return new Data();
        }
    }
}

我的Junit测试用例-

@Test
public void testCloneSucess() throws CloneNotSupportedException {
    Data data = new Data();
    Data d = (Data) data.clone();
    assertNotNull(d);
}

@Test
public void testCloneFailure() throws CloneNotSupportedException {
    Data data = new Data();
    doThrow(new CloneNotSupportedException()).when(data.clone());
    assertThrows(CloneNotSupportedException.class, () -> data.clone());
}

我已经为图片提供了链接,这将使我对这个问题和我所做的尝试有更多的了解。

  1. 源代码-source code
  2. 我尝试过的junit-junits

共有1个答案

金令
2023-03-14

在我回答你的问题之前,有几件事:

>

Data other = new Data();
other.A = this.A
return other;

但是现在您的自定义实现具有与Object.clone()完全相同的行为,因此没有理由这样做。通常,您只需要实现可克隆的。您不需要覆盖clone(),除非您需要一些非常特殊的处理,而Object已经提供给我们的按位克隆不会发生这种情况。

话虽如此,要测试抛出异常的路径,您需要创建一个条件,try块中的某些内容抛出您想要测试的特定异常。在这种情况下,唯一的选择是使super。clone()来抛出CloneNotSupportedException。这意味着您必须模拟对象。克隆并使其引发异常。

此外,您不想assertThrows(CloneNotSupportedException.class,()-

 类似资料:
  • 问题内容: 我知道这样做的对策。我想知道是否有一种不错且紧凑的方法来做到这一点。 问题答案: 图例-您的答案可能会有所改善;因为如果失败次数过多,就会吞下异常。好多了:

  • 我有一个程序,显示与名称和用户需要输入他们的字段。我怎么测试这个? AssertionError:JSON路径“$.FirstName”处没有值,异常:JSON不能为null或空 我的测试: storetest.java

  • 在我的项目(spring boot应用程序)中,我有大约200个测试用例。最近,我们为缓存管理器(ehcache)实现了一个工厂bean,它位于我的启动类(@SpringBootApplication)中。 我的问题是,一旦带有工厂bean的启动类被一个测试用例执行,所有后续的测试用例都会失败,并出现错误。。。 “同一个VM中已存在另一个同名“appCacheManager”的CacheManag

  • 我想问一下,我如何用Python编写以下模块。 这样我就可以使用say调用它

  • 问题内容: 我正在尝试为我的简单类生成hashCode()方法,但是我什么也没用。我将不胜感激任何帮助。我已经实现了equals()方法,该方法如下所示,并且还想知道是否需要实现compareTo()方法。我已经导入了java.lang.Character以使用character.hashCode(),但它似乎不起作用。 提前致谢… 正在给我java.lang.Comparable转换错误的com

  • 我正在为我的HeapSort静态方法开发一个辅助方法私有E sortRemove()。让我注意一下,这个堆是一个MaxHeapPriorityQueue,它的所有元素都有一个子元素,其值小于父元素。 我正在努力 重复调用删除,直到堆为空。 但是,当一个元素被“删除”时,它被移动到数组的末尾,而不是完全从数组中逐出。 当你完成时,瞧!数组已排序。 我试图弄清楚如何让这个算法适合我的代码。 因此我有: