【问题标题】:Sonar complains about Spring Boot configuration声纳抱怨 Spring Boot 配置
【发布时间】:2015-12-22 13:19:48
【问题描述】:

我有这个类来启动 spring-cloud 配置服务器。这是一个spring-boot应用程序。

@SpringBootApplication
@EnableConfigServer
@EnableDiscoveryClient
public class ConfigServerApplication {

    public static void main( String[] args ) {

        SpringApplication.run( ConfigServerApplication.class, args );

    }

}

应用程序运行良好,我的所有单元测试都很好。但是,在我们的竹管道中,它将初始化一个声纳过程来分析代码。我们不断收到这些小警告,表明以下内容:

Utility classes should not have a public constructor

我知道这是一个小问题,但我的任务是从我们的代码中删除这些问题。

理想情况下,您会将类标记为 final 并提供一个私有构造函数,或者所有搜索都提供一个解决方案。但是,Spring 配置类不能成为最终类,也不能有私有构造函数。

有什么办法解决这个问题吗?

【问题讨论】:

    标签: spring spring-boot sonarqube spring-cloud spring-java-config


    【解决方案1】:

    恐怕这不是 spring-boot 或 spring-cloud 可以解决的问题。您需要在声纳配置中添加例外。

    【讨论】:

    • 谢谢@spencergibb 我也是这么想的。但是,我认为声纳会看到该类包含一个公共静态 main 方法并将其用作该规则的例外。
    • P.S.很高兴在 SpringOne2gx 见到你。喜欢你的谈话。
    • @benzonico 我已经在列表中发布了一条消息。感谢您的信息。
    • 您好,您可以在问题跟踪系统中添加帖子或问题的链接吗?
    • 关于如何仅针对 SpringBoot 应用程序而不是所有公共构造函数违规禁用此规则的任何建议?
    【解决方案2】:

    调整你的声纳设置当然是一个更好的方法,但如果你想please the machine spirits,你可以简单地在你的类中添加一个非静态的虚拟函数,使其在你的眼中是“非实用程序”声纳检查器。

    【讨论】:

    • 这真是胡闹,请报告问题以改进规则并将其标记为您的 sonarqube 实例中的误报。
    • @benzonico 我不打算实现它,但它多次出现很有趣。
    • 我认为这对他来说有点私人,因为他正在研究 Sonar。如果您碰巧报告它,您介意在此处留下指向 Jira 票证的链接吗?我想知道它需要多长时间才能修复。
    【解决方案3】:

    很容易测试:

    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class YourApplicationTest {
    
        @Test
        public void shouldLoadApplicationContext() {
        }
    
        @Test
        public void applicationTest() {
            YourApplication.main(new String[] {});
        }
    
    }
    

    现在声纳说,这是经过测试的!
    (感谢:罗伯特@https://stackoverflow.com/a/41775613/863403

    【讨论】:

    • 不要编写测试来满足工具或目标数量。这就是失去 TDD 和单元测试目的的地方。这个答案是一个错误的指针。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-13
    • 2016-12-17
    • 1970-01-01
    • 2022-01-12
    • 2019-02-06
    • 2015-03-23
    相关资源
    最近更新 更多