2013-08-23 20 views
0

不acessible我有下面的類:薩拉特道 - 通過JUnit的

package backend.link 

import org.bson.types.ObjectId 
import com.novus.salat.annotations.raw.Salat 
import com.novus.salat.dao.ModelCompanion 
import com.novus.salat.dao.SalatDAO 
import model.hybrid.HybridEntity 
import play.api.Play.current 
import se.radley.plugin.salat.mongoCollection 
import com.novus.salat.annotations.raw.Key 
import backend.data.MongoDBLayer 
import com.mongodb.casbah.commons.MongoDBObject 
import backend.data.SpaceDao 
import backend.data.PageDao 
import backend.data.UserDao 
import se.radley.plugin.salat._ 
import org.bson.types.ObjectId 
import com.novus.salat.{ TypeHintFrequency, StringTypeHintStrategy, Context } 
import play.api.Play 
import play.api.Play.current 

/* 
    Adding a custom Salat context to work with Play's Classloader 
    Using example from: 
    https://github.com/leon/play-salat/blob/master/sample/app/models/mongoContext.scala 
*/ 
package object mongoContext { 
    implicit val context = { 
    val context = new Context { 
     val name = "global" 
     override val typeHintStrategy = StringTypeHintStrategy(when = TypeHintFrequency.WhenNecessary, typeHint = "_t") 
    } 
    context.registerGlobalKeyOverride(remapThis = "id", toThisInstead = "_id") 
    context.registerClassLoader(Play.classloader) 
    context 
    } 
} 
import mongoContext._ 

/** 
* class for storing hybridLInks 
*/ 
case class HybridLink(
    @Key("_id") id: ObjectId = new ObjectId, 
    val name: String, 
    val origin_id: String, 
    val origin_type: String, 
    val target_id: String, 
    val target_type: String) 

/** 
* the companion object for HybridLink that acts as a Dao 
*/ 
object HybridLink extends ModelCompanion[HybridLink, ObjectId] { 

    def collection = MongoDBLayer.mongoDB("hybridlink") 
    val dao = new SalatDAO[HybridLink, ObjectId](collection) {} 

    def apply(name: String, origin: HybridEntity, target: HybridEntity): HybridLink = 
    { 
     HybridLink(null, name, origin.id, origin.getClass().getName(), target.id, target.getClass().getName()) 
    } 

    /** 
    * finds all Objects that are pointing to a certain HybridEntity 
    */ 
    def findByReferenced(entity: HybridEntity): List[HybridEntity] = { 
    val it = find(MongoDBObject("target_id" -> entity.id, "target_type" -> entity.getClass().getName())) 
    val linkList = it.toList 
    for (link <- linkList) 
     yield this.getHybridEntitybyClassandId(link.origin_type, link.origin_id) 

    } 

    /** 
    * finds all Objects that are pointed at from a certain hybridEntity 
    */ 
    def findReferencing(entity: HybridEntity): List[HybridEntity] = { 
    val it = find(MongoDBObject("origin_id" -> entity.id, "origin_type" -> entity.getClass().getName())) 
    val linkList = it.toList 
    for (link <- linkList) 
     yield this.getHybridEntitybyClassandId(link.target_type, link.target_id) 
    } 

    /** 
    * finds a list of all outgoing Links 
    */ 
    def findReferencinglinks(entity: HybridEntity): List[HybridLink] = { 
    val it = find(MongoDBObject("origin_id" -> entity.id, "origin_type" -> entity.getClass().getName())) 
    val linkList = it.toList 
    return linkList 
    } 

    /** 
    * returns a list of all links that reference the specified HbyridEntity 
    */ 
    def findIncominglinks(entity: HybridEntity): List[HybridLink] = { 
    val it = find(MongoDBObject("target_id" -> entity.id, "target_type" -> entity.getClass().getName())) 
    val linkList = it.toList 
    return linkList 
    } 

    /** 
    * retrieves the corresponding HbyridEntity by id and type 
    */ 
    def getHybridEntitybyClassandId(cls: String, id: String): HybridEntity = 
    cls match { 
     case "model.hybrid.Space" => SpaceDao.findById(id) 
     case "model.hybrid.Page" => PageDao.findById(id) 
     case _ => throw new IllegalArgumentException("couldnt find corresponding dao for class " + cls) 
    } 

    /** 
    * helper method for removing all references that are pointing to a specified HybridEntity 
    */ 
    def removeAllReferences(entity: HybridEntity): Unit = 
    { 
     remove(MongoDBObject("target.id" -> entity.id, "target._typeHint" -> entity.getClass().getName())) 
    } 

} 

正如你可以看到它使用了自定義背景與劇中的類加載器來工作。

但是我不能在Junit測試中使用它。

我得到的錯誤信息: 「java.lang.NoClassDefFoundError:無法初始化類在backend.core.search.LinkService $ .linkObjects(LinkService.scala:31)backend.link.HybridLink $ 」

就如何解決這一問題的任何想法,將appreciated-

回答

0

那是非常愚蠢的我,因爲我沒有,甚至還包括測試方法:/(抱歉的是)

我只是忘了加:

@Test def testImport() { 
    running(FakeApplication()) { 
     //test code goes here 
    } 

現在一切都像一個魅力。