2014-10-08 123 views
0

我有一个公共外部类和私有内部类的场景。现在我想创建一个此私有内部类的对象,用于单元测试其中的方法。从其他类创建私有内部类的对象

public class MyOuterClass { 
    public MyOuterClass() { } 

    private class MyInnerClass { 
     public MyInnerClass() { } 
    } 
} 

这是我尝试从其他测试类创建“MyInnerClass”对象的场景。我发现使用私有构造函数创建类的对象的解决方案,但这不是我所需要的。请帮我解决一下这个。 在此先感谢。

+0

你不应该需要单元测试私人内部类。那应该是告诉你你的课程设计是错误的(或者你的测试方法是错误的)。 – 2014-10-08 09:50:04

+1

类不能有'()' – Rustam 2014-10-08 09:53:04

回答

0

private对象的整个概念是它只能被它封装的类访问。你不能直接从另一个类创建一个私有对象的实例。

+0

如果是这样,你如何在单元测试中实现100%的代码覆盖率,对于这种类型的代码有反射访问私人成员的方法,但我不知道如何做到这一点这种情况。 – user2786437 2014-10-08 10:34:08

1

你有三个选择:

  1. 使内部类包私有(默认访问级别,而不是),你可以把你的测试代码在同一个包访问它。

  2. 使用反射通过覆盖访问限制来访问它。

  3. 反思你的建筑。您可能需要直接测试私有内部类,但通常会测试外部类,通过这样做也会测试内部类。

+0

对于点#1和#3(特别是#3)+1。选项#2是严峻的。 – 2014-10-08 09:58:04

+0

@Tim for using#3对于我的场景,内部类是扩展Handler的类,它重写了句柄消息方法,除非创建了内部类的对象,否则不能直接调用它。 – user2786437 2014-10-08 10:38:02

+0

@tim,并且我们无法更改所有发生这种情况的访问修饰符。所以我认为使用反射会是更好的方法。你可以发布一个示例代码片段作为IAM新的反思。 – user2786437 2014-10-08 10:39:18