Skip to content

Instantly share code, notes, and snippets.

@dalbrekt
Last active August 29, 2015 14:19
Show Gist options
  • Save dalbrekt/bc325d78bc3954fa59b4 to your computer and use it in GitHub Desktop.
Save dalbrekt/bc325d78bc3954fa59b4 to your computer and use it in GitHub Desktop.
/**
* Scala IoC - Value injection on traits
*/
case class Car(id: Long, year: Int, brand: String)
trait CarDao {
def save(car: Car): Unit
def findBy(id: Long): Option[Car]
}
class FileCarDao extends CarDao {
override def save(car: Car): Unit = println("Saves car: " + car)
override def findBy(id: Long): Option[Car] = Some(Car(id, 2009, "Volvo"))
}
trait RegistrationService {
val carDao: CarDao
def register(car: Car): Car = {
carDao.save(car)
car
}
}
object Registration {
val service = new RegistrationService {
override val carDao: CarDao = new FileCarDao
}
}
// Default registration service invocation
Registration.service.register(Car(10, 2015, "BMW"))
// Test case
class RegistrationServiceTest {
val registrationService = new RegistrationService {
override val carDao: CarDao = mock(classOf[CarDao])
}
test("that a car an be registered") {
val car = registrationService.register(Car(1, 2014, "Audi"))
car.id should be(1)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment