package com.company.domain;
public class Foo {
private FooHelper helper;
public setHelper(FooHelper helper) {
this.helper = helper;
}
public Double method1(Integer a, Integer b) {
... // logic here
Integer var = method2(a); // internal call to method2
... // more logic here
}
protected Integer method2(Integer c) {
... // logic here and return an Integer
}
}
package com.company.domain;
@RunWith(MockitoJUnitRunner.class)
public class FooTest {
@Mock private FooHelper fooHelperMock; // mocking dependencies as usual
@InjectMocks @Spy Foo foo; // this way we can stub internal calls
@Test
public void method1Test() {
doReturn(2).when(foo).method2(1); //stub the internal method call
... // stub fooHelperMock method calls here
Double result = foo.method1(1, 2);
assertEquals(new Double(1.54), result);
verify(foo, times(1)).method2(1);
... // verify fooHelperMock method calls here
}
@Test
public void method2Test() {
... // stub fooHelper method calls here
assertEquals(new Integer(5), foo.method2(3));
... // verify fooHelperMock method calls here
}
}
通常,测试类的内部函数调用会使测试过于脆弱。当单元测试时,您只想看到类作为一个整体正在做它应该做的事情。你应该故意忽略内部。
忽略内部有很多有用的好处。主要是,如果您更改了方法--只要公共接口保持不变--您的测试仍然会通过。耶。这是您希望单元测试具有的稳定性类型。脆弱的单元测试几乎比没有单元测试更糟糕。一个脆弱的测试必须在每次代码更改时进行更改,即使一切都还在工作。这只为您提供额外的工作。
不过也有例外。在以下情况下,我会考虑取消内部函数调用:
总之,我强烈建议您不要在方法级别进行测试。类应该是一个独立的单元。如果这个班在工作,一切都很好。这种方法为您提供了安全所需的测试和更改事物所需的灵活性。
@raspacorp
实际上,如果您只测试一个用例,那么有人可以对var=2进行硬编码,然后通过您的测试用例。但是,您的工作是设计测试用例,以覆盖足够多的不同用例,从而合理地满足它的行为是适当的。
问题内容: 假设我有一个可以进行大量处理的类,并使用多个集合进行操作。我要做的是确保这种操作不会导致内存不足,甚至更好,我想设置一个阈值来确定它可以使用多少内存。 什么是正确的方法?还是这不可能/不可行? 问题答案: 我可以想到几种选择: 通过微基准测试(即jmh)找出您的方法需要多少内存。 基于启发式估计的建筑分配策略。有几种实现类大小估计的开源解决方案,即ClassSize。一种更简单的方法可
在我们的ASP。Net核心应用程序,我们有许多API从服务类调用公共方法。 服务类正在实现一个接口。 每个服务方法(取决于复杂性和需求)可以调用任意数量的内部或私有或辅助方法。 虽然这些内部/私有/或辅助方法中的每一个都单独进行单元测试,但我们如何以这样一种方式测试公共服务方法,即我们不必重复已经在测试内部/私有/辅助方法中花费的代码/精力? e、 我们可以很容易地模拟接口方法,说接口方法需要这些
因为save是一个void方法。 有人知道如何修复这个单元测试吗?
问题内容: 阅读并学习单元测试,尝试理解下面的文章,该文章解释了静态函数调用的困难。 我不清楚这个问题。我一直认为静态函数是在类中舍入实用函数的一种好方法。例如,我经常使用静态函数调用进行初始化,即: //阅读这篇文章后,我现在的目标是… 但是,我为此课程编写的几十个测试是相同的。我什么都没改变,他们仍然都过去了。难道我做错了什么? 该帖子的作者指出: 静态方法的基本问题是它们是过程代码。 我不知
我陷入了单元测试场景的一个基本问题,并将感谢帮助。 我有一个类,它调用在DB中将标志设置为true。 我的测试: 我被要求测试并检查是否正在使用相关数据调用。 由于返回类型无效,我如何测试它?
我最近问了几个面向jUnit和Mockito的问题,但我仍然很难掌握其中的诀窍。这些教程都是针对非常简单的示例,所以我很难扩展我的测试用例来为我的类工作。 我目前正试图为我在WebApp中的一个代理中的一个方法编写一些测试用例。该方法与代理内部的几个其他方法交互,以验证某些对象。我现在只想测试一下这个方法。 使用Mockito设置存根(希望是正确的术语)。如下所示: 尝试执行我的方法,如下所示: