小编Vit*_*jok的帖子

Spring Boot集成测试:@AutoConfigureMockMvc和上下文缓存

我正在使用Spring Boot 1.5.1构建非常基本的Web应用程序,并希望创建用于检查REST端点的集成测试.正如文档所推荐的那样,可能会使用MockMvc.

这是非常简单的测试类:

package foo.bar.first;

import ...

@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class ApplicationTest1 {

    @Autowired
    private WebApplicationContext context;

    @Autowired
    private MockMvc mvc;

    @Test
    public void shouldStartWebApplicationContext() {
        assertThat(context).isNotNull();
    }

    @Test
    public void shouldReplyToPing() throws Exception {
        mvc.perform(get("/ping"))
                .andExpect(status().isOk());
    }
}
Run Code Online (Sandbox Code Playgroud)

正如所料,它启动完整的应用程序上下文并运行测试.

后来我创建了其他类似的测试类,并注意到每个测试类都启动了全新的应用程序上下文.实验表明,上下文仅在来自同一包的测试类之间共享.

例如,如果多次复制相同的测试类,则上下文如下:

foo.bar
  first
    ApplicationTest1 (shared context)
    ApplicationTest2 (shared context)
  second
    ApplicationTest3 (brand new context)
Run Code Online (Sandbox Code Playgroud)

进一步的调查表明它与@AutoConfigureMockMvc注释有关.如果删除了注释和MockMvc相关的测试用例,则所有三个类都成功共享相同的上下文.

那么问题是如何使用MockMvc获取所有测试的共享上下文

注意:其他资源建议MockMvcBuilders.webAppContextSetup(context).build()用于获取MockMvc实例,但它对我不起作用(处理Web请求时不涉及过滤器).

junit spring-mvc spring-mvc-test spring-boot

12
推荐指数
1
解决办法
5316
查看次数

具有额外连接条件的JPA @JoinTable

我花了几个小时在周围搜索,并没有发现任何类似于我的情况.

让我们假设遵循多对多数据模型:

Contract (any business entity)
- contract_id
- other fields

Party (another business entity)
- party_id
- other fields

Contract_Party (relations between first two 
with additional role indicator, e.g. owner, signer, seller, etc)
- contract_id
- party_id
- role

现在让我们假设我想要映射与党相关的所有合同(单向).可以使用Party实体类中的以下注释来完成:

@OneToMany
@JoinTable(
  name="Contract_Party", 
  joinColumns = {@JoinColumn(name="party_id", referencedColumnName="party_id")},
  inverseJoinColumns = {@JoinColumn(name="contract_id", referencedColumnName="contract_id")}
}
private List<Contract> contracts;
Run Code Online (Sandbox Code Playgroud)

那样就好.

但我正在寻找的是如何映射具有特定角色的合同?

@OneToMany
@??? ( "ROLE = 'SIGNER' ")
private List<Contract> signedContracts;
Run Code Online (Sandbox Code Playgroud)

从技术上讲,我正在寻找一种在JOIN语句中添加额外条件的方法.

到目前为止,在类似主题中发现了以

  • 将连接表映射为单独的实体,并使用自定义查询按角色执行过滤;
  • Hibernate有@JoinFormula注释,但无法在@JoinTable中应用它; …

java hibernate jpa jointable

9
推荐指数
1
解决办法
2万
查看次数

Jenkins Multibranch Pipeline:如何只结帐一次?

我通过 BlueOcean UI 在本地 Jenkins 上创建了非常基本的多分支管道。从默认配置中,我删除了几乎所有行为,除了发现分支的行为。配置看起来如下:

配置

Jenkinsfile我尝试设置以下场景中:

  • 结账分行
  • (可选)将其合并到master分支
  • 构建后端
  • 构建前端

摘自我的Jenkinsfile

pipeline {
  agent none   
  stages {    
    stage('Setup') {
      agent {
        label "master"
      }    
      steps {
        sh "git checkout -f ${env.BRANCH_NAME}"
      }
    }

    stage('Merge with master') {
      when {
        not {
          branch 'master'
        }
      }    
      agent {
        label "master"
      }    
      steps {
        sh 'git checkout -f origin/master'
        sh "git merge --ff-only ${env.BRANCH_NAME}"
      }
    }

    stage('Build Back-end') {
      agent {
        docker {
          image 'openjdk:8' …
Run Code Online (Sandbox Code Playgroud)

jenkins multibranch-pipeline jenkins-blueocean

3
推荐指数
1
解决办法
6372
查看次数