此错误的原因:由于对所需库的限制,无法访问类型测试?

时间:2014-05-20 07:14:13

标签: java eclipse

**Description** 

Access restriction: The type Test is not accessible due to restriction on required library 

**Resource**

/Applications/Eclipse Java/plugins/org.junit_4.11.0.v201303080030/junit.jar 

**Path**

AdditionTest2.java  

**Location**

/Practice/src/testing   line 5  

**Type**

Java Problem

我已经看到了其他SO线程的答案:

Access restriction on class due to restriction on required library

Access restriction on class due to restriction on required library rt.jar?

我已经应用了修复 - 构建路径 - >删除系统库 - >重新加入,它的工作原理。但是,我仍有两个问题:

1.为什么代码仍以红色突出显示?

顺便说一句,代码如下

package testing;

import static org.junit.Assert.*;

import org.junit.Test;

public class AdditionTest2 {
    // @Test is underlined red
@Test
public void testAddition() {
    Addition add = new Addition();
    int[] numbers = {1, 2};

            // this line is underlined red
    assertEquals("1 + 2 must be 3", 3, Addition.add(numbers));
}

}

2.导致此错误的原因是什么?我再次阅读了两个主题,但我仍然不明白。

谢谢!

巴乔

编辑:实际上,我已经纠正了 - 它无法正常工作。我对eclipse中的测试不太熟悉,但在JUnit选项卡下,没有任何反应。

编辑2 :构建路径图像,如果有帮助的话 Build Path

编辑3 :构建JUnit 3和JUnit 4的路径图像

Build Path for JUnit 3 and JUnit 4

编辑4 +解决方案:实际上,JUnit 4的测试代码根本没有运行 - 当我点击Run - >运行因为它没有运行 - 我试图从Build Path中删除JUnit 3,它现在正常工作!除了现在我还有另一个问题,就是不知道测试失败的原因,但这是另一个问题。

4 个答案:

答案 0 :(得分:1)

Eclipse基于OSGi。 OSGi有一个概念:“是的,你可以看到这个类,但你最好不要使用它。”它是private类的扩展。

一般的想法是来自某人的代码包含公共API,它包含公开的类,因为Java编译器需要它,但它们不是公共API的一部分。

示例是Java运行时中com.sun包中的类。由于只有Oracle的Java版本包含它们,因此使用它们会很糟糕。这就是为什么Eclipse开发人员将检查添加到他们的编译器中。

在您的情况下,错误消息似乎很奇怪。 junit.jar不包含私有API。我的猜测是你以某种方式引入了错误的JUnit JAR(即Eclipse认为是私有的,只能访问IDE)。

尝试使用Built Path--> Add Libraries将“JUnit”添加到项目中,而不是手动添加JAR。

[编辑] 如果使用Built Path--> Add Libraries添加JUnit JAR,则不应发生此错误。事实上,它首先不应该是错误 - 访问限制是警告。

尝试将编译器选项重置为默认值,然后重试。

答案 1 :(得分:0)

我有同样的问题,可以通过在所有我的交互插件项目中从manifest.mf文件中删除junit(使用依赖选项卡)然后添加junit与替代aproach来解决它 内置路径...... - >添加图书馆... - > JUnit的 正如Aaron上一篇文章中所描述的那样。

答案 2 :(得分:0)

我遇到了一个非常类似的问题,我能够通过更新我的Eclipse项目的类路径文件中的一个条目来解决它,该文件指向旧版本的JUnit。

我改变了

<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/3"/>

<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>

答案 3 :(得分:0)

这可能很明显,但是如果您使用的是Spring框架,请确保也将spring库添加到构建路径中。

下载spring库,例如spring-framework-4.1.6.RELEASE-dist.zip-解压缩到笔记本电脑上的文件夹-C:\ springLib \

然后将用户库添加到构建路径并指向该lib