Java Gradle-在单元测试中使用其他版本的依赖关系

Java Gradle-在单元测试中使用其他版本的依赖关系,java,android,gradle,threetenbp,Java,Android,Gradle,Threetenbp,在纯Java模块中,我依赖于编译组:'org.threeten',名称:'threetenbp',版本:threeTenVersion,分类器:'no tzdb'。我使用的是no tzdb变体,因为该模块将在Android应用程序中使用,tzdb将由Android模块添加 然而,在我的单元测试中,我希望能够调用一些方法,比如DateTime.now(),它需要用tzdb初始化ThreeTen 我想知道是否有办法只在单元测试期间使用库的另一个版本,以便我可以在安装了tzdb的情况下使用该版本 我已

在纯Java模块中,我依赖于编译组:'org.threeten',名称:'threetenbp',版本:threeTenVersion,分类器:'no tzdb'。我使用的是
no tzdb
变体,因为该模块将在Android应用程序中使用,tzdb将由Android模块添加

然而,在我的单元测试中,我希望能够调用一些方法,比如
DateTime.now()
,它需要用tzdb初始化ThreeTen

我想知道是否有办法只在单元测试期间使用库的另一个版本,以便我可以在安装了tzdb的情况下使用该版本

我已经尝试了以下方法:

compile group: 'org.threeten', name: 'threetenbp', version: threeTenVersion, classifier: 'no-tzdb'
    testCompile "org.threeten:threetenbp:threeTenVersion"
但是仍然使用
无tzdb

谢谢,,
Pierre

不确定这是否与您的情况相关,但需要考虑一种方法:

  • 如果您还没有使用(Three Ten Android Backport),它可以有效地初始化Android上的时区信息,请切换到使用它
  • 在单元测试中,使用原始的JVM backport() 我的灵感来自于在测试中尝试JVM后端口,它对我很有用

    因此在
    build.gradle
    中,我有:

    compile 'com.jakewharton.threetenabp:threetenabp:1.0.4' 
    
    // For unit tests involving ThreeTen, use JVM backport instead of Android one
    testCompile('org.threeten:threetenbp:1.3.3') {
        exclude group: 'com.jakewharton.threetenabp', module: 'threetenabp'
    }
    

    通过这种设置,在我的单元测试中,像
    ZonedDateTime.now()
    OffsetDateTime.now()
    这样的方法可以很好地工作。(ThreeTen中没有名为
    DateTime
    )的类型。

    如果使用Mockito,可以模拟上下文和AssetManager,以便AndroidThreeTen加载测试项目的TZDB.dat版本。比如:

    @Before
    public void setUp() throws Exception {
        Context mockContext = mock(Context.class);
        AssetManager mockAssets = mock(AssetManager.class);
        when(mockAssets.open(anyString())).thenReturn(getClass().getClassLoader().getResourceAsStream("TZDB.dat"));
        when(mockContext.getAssets()).thenReturn(mockAssets);
        AndroidThreeTen.init(mockContext);
    }
    
    确保将您的
    TZDB.dat
    放入
    src/test/resources/TZDB.dat

    如果您正在查找
    TZDB.dat
    ,可以在构建项目后在此处找到它:
    project\u directory/app/build/intermediates/aar/com.jakewharton.threetenabp/threetenabp/1.0.4/assets/org/threeten/bp/TZDB.dat

    您是否尝试将测试的三个十标记为“测试运行时”?请看,实际上它只是按照我尝试的方式工作,只是Android Studio不理解我添加到构建脚本中的新testCompile行。我重新启动了IDE,它运行得非常好。。。奇怪。。。无论如何,谢谢你,你也可以构建一个只支持tzdb的jar,你可以将它添加到你的testCompile配置中:是的,gradle可以像那样挑剔。我似乎记得在过去遇到过这个问题。你使用什么IDE?