【问题标题】:j2objc exception prevents unit tests runningj2objc 异常阻止单元测试运行
【发布时间】:2016-12-27 20:33:19
【问题描述】:

我正在开发一个使用 cocoapod 的应用程序,该应用程序是使用 j2objc 构建的。但是当我尝试在 Xcode 中运行单元测试时,我看到以下错误:

Terminating app due to uncaught exception 'JavaLangArrayStoreException', reason: 'source of type IOSByteArray is not an array'

我了解 Java 中的数组不能完美地映射到 Objective C 数组。但是这个异常并不会阻止应用程序运行,那么有没有办法在单元测试和 UI 测试中忽略它?

失败的代码位于 cocoapod 中,因此我不确定是否能够进行任何手动转换。这是失败的行:

return IOSObjectArray_Get(nil_chk([rawType getGenericInterfaces]), i);

【问题讨论】:

  • 提供您的代码

标签: objective-c xcode unit-testing cocoapods j2objc


【解决方案1】:

我不知道您的代码,但您必须了解 Objective-C 的数组与 IOSByteArray 不同!

IOSByteArray 使用前必须转换成常用的 objc 数组。

使用这个

- (void)getBytes:(jbyte *)buffer
          offset:(jint)offset
          length:(jint)length;

或者这个

- (NSData *)toNSData;

工作方法。

【讨论】:

  • 查看修改后的问题。转换 IOSByteArray 将是理想的解决方案,但我无法直接访问它,因为它位于 cocoapod 内。此外,该异常不会在我运行它时导致应用程序崩溃,所以如果有办法忽略它会很好。
【解决方案2】:

这看起来不像是失败的线路。该错误消息来自 System.arraycopy,它未能说明 IOSByteArray 不是 IOSArray 的子类which it is。 IOSObjectArray 仅抛出 ArrayStoreException here,并带有不同的错误消息。

您是否有单元测试的源代码,如果有,您能否发布它或它的项目(如果它是开源的)?如果您 file a j2objc issue 测试失败,您将在修复后立即收到通知。

如果这是一个 JUnit 测试,您可以使用 try/catch 块包围失败的行,就像在 Java 中一样。或者注释掉。 ;-)

【讨论】:

    猜你喜欢
    • 2013-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 2013-01-20
    • 1970-01-01
    相关资源
    最近更新 更多