Fan Lin
Fan Lin
gradle + jacoco 的暂时没有现成的例子...
Java-Demo的`pom.xml`文件默认应该没有启用`testable-maven-plugin`,如果要启用的话,需要同时去掉`maven-surefire-plugin`的`...`配置,这两种二选一即可。 目前的主流IDE对`maven-surefire-plugin`插件的支持比较好,如果需要在IDE中运行单元测试,还是推荐用`maven-surefire-plugin`配置的方式。
TestableMock中的Mock使用方式和Mockito等工具不太一样,是让每个业务类自己提供自己的Mock实现,放置在相应测试类里名为`Mock`的内部类,或者独立的`XxxMock`类里。 举例来说,`ServiceA`类型的Mock方法可以放在`ServiceATest`里的`Mock`内部类里,或者`ServiceAMock`类里,这两个地方定义的Mock方法也只对`ServiceA`类型里的代码调用有Mock作用。 因此上述在`ServiceATest.Mock`类里定义的`A1()`方法,在测试时会自动替换`ServiceA`里的`A1()`调用,但对不论是从`ServiceB`还是`ServiceBTest`里调用的`A1()`方法都不会生效。
这个问题确实需要专门解释一下,近期会在文档里补充一个示意图
实际不应该出现为了Mock加inner()方法的这种情况的哈。 使用Mock的目的是因为在**被测类**(业务类)里有某些调用会影响单元测试正在运行,但为了测试改业务代码不合适,所以要用额外机制来Mock掉。测试类里的调用是不需要被Mock的,比如`ServiceBTest`单元测试类的方法不想调用真实的`ServiceA.A1()`,那么直接改测试代码就好了,而不是要到被测类去加`inner()`方法。这样解释不知说清了没有~ 对任何Mock工具来说,Mock的目标都只应该是被测类里的调用。
问题收到,我试复现一下看看
TestableMock提供Mock是基于调用替换的,比如在`AgentIServiceImpl`类的代码中,有`agentMapper.getAvailableAgentCount()`和`agentMapper.queryAgentRegionCount()`这两个调用,需要在测试的时候被置换成Mock方法,只需将您的示例代码中的Mock内部类定义改为如下,即可通过测试: ```java public static class Mock { @MockMethod(targetClass = AgentMapper.class) public int getAvailableAgentCount() { System.out.println("mock生效"); return 1; } @MockMethod(targetClass = AgentMapper.class) public Map queryAgentRegionCount() { System.out.println("mock生效"); return new HashMap(); }...
给切面类关联上自己的Mock类就可以了。 单元测试一般不会涉及切面,除非是作集成测试。
问题收到,先放到`v0.4`版本的目标功能里
MacOS的docker desktop会先在系统上创建一个Linux虚拟机,然后docker和本地kubernetes是运行在虚拟机里的,因此是需要增加这个虚拟机的文件句柄数量。 进入虚拟机的方法可以搜索“MacOS Docker 进入虚拟机”,网上有比较多文章,比如: https://blog.csdn.net/m0_38112165/article/details/120117648