如何通过Android.mk在AOSP Java和Robolectric中获得代码覆盖率

问题描述 投票:1回答:1

我正在用AOSP编写应用程序。我需要为此应用进行单元测试。为此,我使用了robolectric。该应用程序和测试使用make(Android.mk)进行编译。我需要一个代码覆盖率报告,并且不知道获取此方法。我只找到了使用gradle的解决方案,我们在项目中没有使用过。

有人知道如何获得代码覆盖率的解决方案吗?

public class Example extends Service
{
   @Override
   public void onCreate() {
     Log.d("Example"," onCreate");
   }

   public boolean foo(){
     Log.d("Example"," foo");
     return true;
   }

   @Override
   public IBinder onBind(Intent intent) {
     return new ExampleBinder();
   }

    public class ExampleBinder extends Binder {
      // Returns service object
      public Example getService() {
        return Example.this;
      }
    }
}
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_PACKAGE_NAME := RoboTestExampleImpl
LOCAL_MODULE := RoboTestExampleImpl

LOCAL_MODULE_TAGS := tests
LOCAL_JACK_ENABLED := disabled

LOCAL_SRC_FILES := $(call all-java-files-under, java)

LOCAL_COMPATIBILITY_SUITE := e-tests
LOCAL_INSTRUMENTATION_FOR := RoboTestExample

include $(BUILD_STATIC_JAVA_LIBRARY)
@RunWith(RobolectricTestRunner.class)
@Config(shadows = {ShadowBinder.class, manifest=Config.NONE)
public class ExampleRoboTest {
    private static final String TAG = "ExampleRoboTest";
    private ServiceController<Example> controller;
    Example service;

    @Before
    public void setUp() {
        controller = Robolectric.buildService(Example.class);
        service = controller.create().get();
    }

    @After
    public void tearDown() {
    }

    @Test
    public void foo()
    {
      assertTrue(service.foo());
    }

}
#############################################
# RoboExample Robolectric test target.         #
#############################################
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_PACKAGE_NAME := RoboTestExampleTest
LOCAL_MODULE := RoboTestExampleTest

LOCAL_MODULE_TAGS := tests

LOCAL_JACK_ENABLED := disabled
LOCAL_PROGUARD_ENABLED := disabled

LOCAL_SRC_FILES := \
        $(call all-java-files-under, src) \
LOCAL_JAVA_LIBRARIES := \
    robolectric_android-all-stub \
    Robolectric_all-target \
LOCAL_STATIC_JAVA_LIBRARIES := \
     jacocoagent \

LOCAL_COMPATIBILITY_SUITE := e-tests
LOCAL_INSTRUMENTATION_FOR := RoboTestExample

include $(BUILD_STATIC_JAVA_LIBRARY)

#############################################################
# runner target to run the previous target.                 #
#############################################################
include $(CLEAR_VARS)

LOCAL_MODULE := RunRoboTestExampleTest
LOCAL_PROGUARD_ENABLED := disabled

LOCAL_JAVA_LIBRARIES := \
    RoboTestExampleTest\
    robolectric_android-all-stub \
    Robolectric_all-target \

LOCAL_TEST_PACKAGE := RoboTestExample
LOCAL_INSTRUMENT_SOURCE_DIRS := $(dir $(LOCAL_PATH))../main/java
LOCAL_ROBOTEST_TIMEOUT := 36000

include external/robolectric-shadows/run_robotests.mk
java android-source robolectric android.mk
1个回答
0
投票

使用Android Build SystemJava Code Coverage Library,请尝试以下操作:

   mma RunRoboTestExampleTest-jacoco
© www.soinside.com 2019 - 2024. All rights reserved.