Fan Lin

Results 91 comments of Fan Lin

thx for the pr : )

Thanks. I quick walked thought the code. The idea of downloading k8s binaries from intranet HTTP server during installation and starting services via cloudinit during OS start up is pretty...

从页面上来看可能是你本地浏览器安装了翻译插件,然后正在访问被翻译过的英文文档页面😂,因为左上角的产品名`TestableMock`都变成`可测试模拟`了,文档的标题也变了。这个才是正常的中文文档: ![image](https://user-images.githubusercontent.com/1113435/208052777-45771d7a-46db-4342-9619-8da9ded5316e.png) 检查一下访问的文档地址哦~~ https://alibaba.github.io/testable-mock/#/zh-cn/doc/use-mock

Could you provide more details or a test case to show why this mock class is incorrect ?

具体是怎么导致Mock代码提交到生产环境的呢? 正常来说,Mock代码只在单元测试运行的时候生效,不会出现在生成的jar包里。

Thanks for raising this issue. I'll prepare a java 15 environment and try my luck : ) It would be very helpful if you can: - try make a simple...

支持直接Mock静态代码块内里的调用,具体一个实际的例子: 业务代码里使用静态代码块加载本地系统库,在运行单元测试的时候希望将它忽略。 ```java public class JNIClass { static { System.loadLibrary("native-lib"); } // 以下具引入的方法省略 public native String xxxx(... ...); } ``` 在测试时候时候Mock掉这个`loadLibrary()`调用,改为打印一行文本(这里是用独立的Mock类,也可以写在Test类里的Mock内部类里面): ```java public class JNIClassMock { @MockInvoke(targetClass = System.class, targetMethod...

抱歉近期issue维护频率比较低,耽搁了较长时间。 刚开始看完描述,没有Get到问题在哪里,最近抽空按照你的描述实际操作了一下,理解你的困惑点了。 从原理来说,Testable其实只需要让每个被测类能找到特定一批Mock方法,然后在测试运行期间自动将被测类里匹配到的调用换成对Mock方法的调用就达到目的了。因此虽然说是三个类相互关联,在大多数情况下,只要有`被测类->Mock类`这条关联就足够了,`被测类->测试类`的关联主要是为了便于建立前一条关联(通常Mock类作为测试类的内部类),而`测试类->Mock类`的关联只在使用到MockScope等特定能力的时候才是必须的。 Testable遵循“约定大于配置”的原则,因此当包路径和Mock类名符合约定的时候,一切过程都会很自然的发生(相关命名规则见文档)。当包路径不一致的时候,就需要用到`@MockWith`注解。这时候,为了尽可能的避免在被测类代码上增加额外的与测试相关的注解,因此Testable约定只需要将`@MockWith`加到测试类上,也能对相应的被测类起作用(直接把`@MockWith`加到被测类上,也能起到同样效果,但这样需要将testable在pom.xml的引用范围从test改为default)。 以上就是所有的规则。 回到上面的问题,当`CookerServiceMock`类被移动到了非约定的目录位置,此时被测类`CookerService`和测试类`SellerServiceTest`都无法找到自己关联的Mock类了。然后给`SellerServiceTest`类加上了`@MockWith`注解,会使得测试类`SellerServiceTest`与它的被测类`SellerService`都关联到Mock类`CookerServiceMock`上,但原本的被测类`CookerService`依然无法找到自己要关联的Mock类,因此测试失败,并且当再增加对发生在`SellerService`类中的`prepareSandwich()`调用的Mock方法时,该Mock能够生效。

和操作系统关系不大,但可能和Gradle版本以及使用的依赖声明方式有关。 这个报错的直接原因是在当前编译上下文的`Classpath`里找不到Testable的依赖包,首先请确保在依赖声明的地方已经通过`testImplementation()`声明添加了Testable的依赖,如果依然不行,最好能提供一个最小可复现问题的完整Demo,便于再进一步排查原因。 另外,我在StackOverflow上找到了一个可以参考的帖子: https://stackoverflow.com/questions/63044549/gradle-switching-to-implementation-testimplementation-causing-errors-when-acces 具体方法是将 "-javaagent:${classpath.find { it.name.contains("testable-agent") }.absolutePath}" 替换为 "-javaagent:${configurations.testCompileClasspath.get().files.filter { it.name.contains("jmockit") }[0].absolutePath}",不妨一试。