scala上@VisibleForTesting注释的行为



我正在测试我添加到一个scala类的构造函数被标记为私有的方法。它是通过一个单例对象来访问的,它做了很多我不想碰的事情。

class DummyClass private (config: DummyConfig) extends Runnable {
   def refresh() = {
       // Does tons of things
   }
   def updateProperty() = {
      // My method
   }
}
Object DummyClass {
  def apply(config: DummyConfig) = {
     val clss = new DummyClass(config)
     clss.refresh()
     new Thread(clss).start()
     clss
  }
}

在我的JUnit (Specs/Mockito)中,我只想创建该类的对象并测试我添加的单个方法,而不需要调用refresh或启动线程。

即使我在类DummyClass上添加了guava的注释@VisibleForTesting,我也不能在JUnit测试中使用构造函数。我有办法做到吗?

这个@VisibleForTesting注释来自哪里?是Guava库提供的那个吗?

很可能,这只是一个信息性的注释,只是用来说明这样一个事实,即您为方法/构造函数提供了更宽松的可见性,只是为了允许单元测试。

在你的情况下,你必须实际上改变构造函数的可见性:

package p
class DummyClass private[p] (config: DummyConfig) extends Runnable {
   def refresh() = {
       // Does tons of things
   }
   def updateProperty() = {
      // My method
   }
}

如果你把你的单元测试放在包p中,你可以访问构造函数,因为它现在是包私有的。添加注释以表明不允许任何产品代码调用构造函数(但是,它将再次依赖于在项目中工作的其他开发人员的良好行为,编译器将不会基于注释强制执行任何内容)。

相关内容

  • 没有找到相关文章

最新更新