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

在Spring Boot应用程序中执行单元测试的清晰度

长孙骏
2023-03-14
public class MyJunitTest {
    private MockMvc mockMvc;
@Mock
private MyService service;

@InjectMocks
private MyController controller;

@Before
public void init() {
    MockitoAnnotations.initMocks(this);
}

@Test
public void unitTestGetAssessmentDetails() {
    when(service.getTest(Someobject.class)).thenReturn(customObjectWithValues);
    Results results = controller.getCall(someRequestObject);
    assertEquals(results, someOtherObjectPrefilledWithValues);
}
}

我的问题是,如果我知道CustomObjectWithValues中设置的值,那么ObjectPreFilledWithValues也是由我设置的,那么assertEquals将始终传递给测试,对吗?它本质上是在测试1==1种测试。那么做这些单元测试有什么意义呢?我知道服务对象不应该连接到实际的DB,因此我们在嘲笑它。那么做这些测试有什么意义呢?关于如何查看单元测试,我是否错过了更大的图景?

附言。-请随时删除此问题,如果它违反了本论坛的规则。

共有1个答案

卢鸿博
2023-03-14

您的测试验证getcall是否返回预期的结果;这是一个黑盒测试。由于您正在编写单元测试,这仅足以“假装”执行单元测试。这种技术在将代码质量与单元测试代码覆盖率混为一谈的公司中很常见。

一个更好的技术是识别控制器类将要采取的步骤,并验证每个步骤是否已经执行(也许是以正确的顺序执行的)。

我假设MyController.getCall如下所示:

@Autowired
private MyService myService;

public BlammyReturnValueType getCall(final BlammyRequestType request)
{
    final BlammyReturnValueType returnValue;

    returnValue = myService.someServiceMethod(request);

    return returnValue;
}
... The current stuff including the assert.

Mockito.verify(service, times(1)).someServiceMethod(customObjectWithValues);
 类似资料:
  • 我在SpringBoot中开发微服务。为服务和DAO层编写单元测试。当我使用@SpringBootTest时,它会在构建时启动应用程序。但是当我运行单元测试时,它不应该启动应用程序。我使用了@runwith(Springrunner.class),但无法在junit类中使用@autowired类实例。如何配置不应该启动应用程序的junit测试类,以及如何在junit类中@Autowired类实例。

  • 本章讨论使用 JUnit,Mockito,MRUnit 和 HBaseTestingUtility 对 HBase 应用程序进行单元测试。大部分信息来自关于测试 HBase 应用程序的社区博客文章。有关 HBase 本身的单元测试的信息,请参阅 hbase.tests 。 175. JUnit HBase 使用 JUnit 进行单元测试 此示例将单元测试添加到以下示例类: public class

  • 使用 GWT 更轻松地测试异步应用程序 您可能从编写 Ajax 应用程序中获得了极大乐趣,但是对它们执行单元测试却着实让人头痛。 在本文中,Andrew Glover 着手解决 Ajax 的弱点(其中之一),即应对异步 Web 应用程序执行单元测试的固有挑战。 幸运的是,他发现在 Google Web Toolkit 的帮助下,解决这个特殊的代码质量问题要比预想的容易。 Ajax 在近期无疑是 W

  • 错误:任务“:app:processDebugManifest”的执行失败。 清单合并失败:属性元数据#android。支持VERSION@value值=(25.3.1)来自[com.android.support:appcompat-v7:25.3.1]AndroidManifest。xml:27:9-31也出现在[com.android.support:recyclerview-v7:26.0

  • 我被要求在一个非常大的SpringBoot项目中为一个服务创建一个集成测试,该项目产生了几十个已实现的服务。当应用程序执行时,所有这些服务都被部署了——我希望避免部署与我正在为其创建测试的服务无关的所有服务。不幸的是,我(还)没有像我希望的那样有很多Spring启动测试的经验,因此我想知道解决这个问题的最佳方法是什么。 我曾考虑在测试类中使用注释对所有不相关的服务进行注释,并使用对所有相关服务进行

  • 当我尝试运行此代码时,spring-boot应用程序会运行,但junit测试用例永远不会运行。但是如果我删除“@SpringBootTest(webEnvironment=webEnvironment.RANDOM_PORT)”,那么Junit测试会运行,但我的spring-boot应用程序不会运行。在我早期的项目中,这从来不是一个问题。