This bug has been fixed, please see:
https://github.com/apache/dolphinscheduler/pull/5817. If your workflow
fails or the error message contains jacoco-related content, please contact
me. Thank you very much.

Calvin Kirs <[email protected]> 于2021年7月10日周六 上午2:08写道:

> Very good, in fact, this problem has been troubled for a long time, and I
> look forward to your PR submission.
>
>
> Best Wishes!
> CalvinKirs, Apache DolphinScheduler PMC
>
>
> On 07/9/2021 21:07,Yuanhao Ji<[email protected]> wrote:
> I did research on the causes of this problem which is caused by the
> conflict between Jacoco with on-the-fly instrumentation and PowerMock when
> loading classes.
>
> *The simplest way to use JaCoCo it is — on-the-fly instrumentation with
> using JaCoCo Java Agent. In this case a class in modified when it is being
> loaded. You can just run you application with JaCoCo agent and a code
> coverage is calculated. This way is used by Eclemma and Intellij Idea. But
> there is a big issue. PowerMock instruments classes also. Javassist is used
> to modify classes. The main issue is that Javassist reads classes from disk
> and all JaCoCo changes are disappeared. As result zero code coverage for
> classes witch are loaded by PowerMock class loader.* ——Code coverage with
> JaCoCo
> <https://github.com/powermock/powermock/wiki/Code-coverage-with-JaCoCo>
>
> *Detailed analysis*
>
> JaCoCo tracks execution with so-called probes. Probes are additional byte
> code instructions inserted in the original class file which will note when
> they are executed and report this to the JaCoCo runtime. This process is
> called instrumentation. In short, Jacoco will modify the class when it is
> loaded.
>
> Jacoco uses class ids to unambiguously identify Java classes. At runtime
> execution data is sampled for every loaded class and typically stored to
> *.exec files. At analysis time — for example for report generation — the
> class ids are used to relate analyzed classes with the execution data.
>
> Meanwhile, when performing unit tests, PowerMock will modify the byte code
> of the tested class according to your mock requirements, which causes the
> class ids to change. There are different classes are used at runtime and at
> analysis time, so the data cannot be related to the analyzed classes. As a
> consequence such classes are reported with 0% coverage.
>
> *Solution*
>
> I think we can make Jacoco running in offline instrumentation
> <https://www.eclemma.org/jacoco/trunk/doc/offline.html> to get code
> converage. This way classes get instrumented by JaCoCo before any runtime
> modification can take place.
>
> Finally, I have tested it with jacoco's offline instrumentation, and I will
> fix this issue this month.
>
> Looking forward to your suggestion!
>
> Issue: #5781 <https://github.com/apache/dolphinscheduler/issues/5781>
>
> Calvin Kirs <[email protected]> 于2021年7月2日周五 上午11:59写道:
>
> Yes, the reason is explained in [1]. No need to worry if prefortest does
> not contain test classes.
>
>
> Best Wishes!
> CalvinKirs, Apache DolphinScheduler PMC
>
>
> On 07/2/2021 11:54,Ruan, Wenjun<[email protected]> wrote:
> In my experience, using the @PrepareForTest annotation only causes code
> coverage to fail in some cases.
> If you want to write test for Demo.java, and you add the Demo.class in
> @PrepareForTest, then the jacoco will not count the coverage in Demo.
>
> Public class Demo{
> }
>
> @PrepareForTest({Demo.class})
> Public class DemoTest{
> }
>
> If you add other class in @PrepareForTest, it will not affect the code
> coverage in Demo.
>
> Thanks,
> Wenjun Ruan
>
> From: Calvin Kirs <[email protected]>
> Date: Friday, July 2, 2021 at 11:25 AM
> To: [email protected] <[email protected]>
> Subject: Re: [DISCUSS] About the problem of incorrect unit test coverage
> in the API module
> External Email
>
> It would be nice to provide a clear context, otherwise I can only
> speculate.
>
>
> 1:It is possible that there is a problem with PowerMock, and there is no
> good solution for it. You can refer to [1]. Or avoid using the @Prefortest
> annotation. I don't know much about your specific problem, so I can't give
> you much help
>
>
> 2:Did you add the relevant test class in the root pom?
>
>
>
>
> [1]
>
> https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fpowermock%2Fpowermock%2Fwiki%2FCode-coverage-with-JaCoCo&amp;data=04%7C01%7Cweruan%40ebay.com%7C2dc138b5f6324b0a7d1c08d93d0906b6%7C46326bff992841a0baca17c16c94ea99%7C0%7C0%7C637607931245142561%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=sOjfCux9bYxwf9V4CoppnvbwX%2F0S0xI5oHFR%2Fr728RA%3D&amp;reserved=0
>
>
> Best Wishes!
> CalvinKirs, Apache DolphinScheduler PMC
>
>
> On 07/2/2021 11:16,Yuanhao Ji<[email protected]> wrote:
> I’m sorry. Please see:
>
>
> https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fapache%2Fdolphinscheduler%2Fruns%2F2465779491&amp;data=04%7C01%7Cweruan%40ebay.com%7C2dc138b5f6324b0a7d1c08d93d0906b6%7C46326bff992841a0baca17c16c94ea99%7C0%7C0%7C637607931245152554%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=vVVGdJbtKfMFI3HZH3NsgsI2B%2BcOdwWB2B8nDjM8IR0%3D&amp;reserved=0
>
> Hemin Wen <[email protected]>于2021年7月2日 周五10:51写道:
>
> hello!
>
> The image in the mail cannot view, can you send detailed error information.
>
>
> --------------------
> Apache DolphinScheduler Commtter
> Hemin Wen  温合民
> [email protected]
> --------------------
>
>
> Yuanhao Ji <[email protected]> 于2021年7月1日周四 下午9:50写道:
>
> Hello, everyone!
>
> I'm dealing with the problem of *incorrect unit test coverage in the API
> module*.
>
> First, I want to ask if anyone has encountered this problem or have any
> suggestions?
>
> [image: image.png]
>
> In addition, my thoughts on this problem are as follows:
>
> 1. First of all, we should find out the cause of this problem. It is
> preliminarily speculated that this problem is caused by the
> *@PrepareForTest
> annotation of Powermock*.
>
> 2. When the cause of the problem is accurately identified, I'll fix it.
>
> 3. In addition, I will further write a complete and detailed *document
> for the unit test of the API module* to remind developers what problems
> should be paid attention to when writing unit test codes.
>
> Look forward to your suggestions!
>
>
>
>

Reply via email to