【问题标题】:How to call tests from another test?如何从另一个测试中调用测试?
【发布时间】:2019-02-19 21:44:27
【问题描述】:

如何从另一个测试中调用测试?

我在 jar 中有一个类作为依赖项添加到我的项目中:

public class Tests{

private MockMvc mockMvc;


@Test
public void test1() throws Exception {
.....
mockMvc.perform(get(myRequest)
        .content(dataFromDB)
.......
    }
}
@Test
public void test2() throws Exception {
.....
mockMvc.perform(get(myRequest)
        .content(dataFromDB)
.......
    }
}
.......

在我的项目中,我有:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = MyApp.class)
public class MyTests {
private MockMvc mockMvc;

@Autowired
private WebApplicationContext context;

@Before
public void init() throws Exception {
    MockitoAnnotations.initMocks(this);
    mockMvc = MockMvcBuilders.webAppContextSetup(context).apply(springSecurity()).build();
}

@Test
public void test() throws Exception {
   CALL SOMEHOW TESTS FROM THE JAR HERE
}

我希望 jar 中的这些测试来测试我项目的数据库(例如:dataFromDB 应该是添加了此依赖项的项目中的一些数据)。

我已经添加了这个 jar,我可以在我的项目中调用类 Tests,所以我可以访问它。我只是不确定如何在其中运行这些测试。

我应该进行哪些更改才能使其正常运行?谢谢

更新:

*我希望 jar 中的所有测试同时调用,而不是单独调用。

*我想让 jar 访问我的数据库,这样它就可以在我的项目的 db 表中获取所有需要的测试数据。

【问题讨论】:

    标签: java maven spring-boot testing jar


    【解决方案1】:

    从所见,你有 2 套环境,1 套测试。

    所以解决这个问题的一种方法是让环境可以通过,mockmvc,dataFromDb 等,以便测试可以独立于环境执行。

    我建议将测试方法放在另一个类中,例如这个非常简化的示例以便于阅读:

    class MyTestMethods {
      void test1(TestEnv env, Req myRequest) {
        env.getMockMvc()
            .perform(env.get(myRequest)
                .content(env.getDataFromDB());
        // assertions here
      }
    }
    
    class OldTestInJar {
      @Test
      public void test1() {
        new MyTestMethods().test1(myEnv, myReq);
      }
    }
    
    class MyNewTest {
      @Test
      public void test1() {
        new MyTestMethods().test1(myNewEnv, myNewReq);
      }
    }
    

    【讨论】:

    • 我不想在我的项目中单独调用 jar 中的每个测试。我想同时给他们打电话。那可能吗?好的,所以我可以像 env 一样发送我的 WebApplicationContext ,对吧?但我不想单独发送每个请求。我想授予对我的数据库的 jar 访问权限,它可以在其中找到数据库表中的所有请求和所需数据。例如在 jar 中,我希望能够获得这样的数据: dataIneed = repo.get("somethingIneed");然后 .... .content(dataIneed) ...
    • 这是使用多种环境实现的一个很好的例子。如果您使用的是 spring 之类的东西,使用依赖注入将是一个很好的用例。只需注入正确的环境,然后我们只需要使用新环境运行 OldTestInJar。不需要 NewTestClass 来运行旧的测试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多