- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在找出最佳方法时遇到了一些麻烦,无法创建一种简单的方法来测试我的一些以数据库为中心的应用程序代码。也许我不喜欢更多的 OO 语言,但我想做的是启动应用程序,为数据库播种,将播种数据传递给测试,然后清理数据库。我试图在 block 之前和之后使用,但一直遇到 delayedInit 和其他竞争条件的各种问题。在文档中,您可以使用 setupData 和 deleteData,但它不提供将数据传递给实际测试的机会。有什么办法可以实现吗?
这是我正在使用的包装器示例:
abstract class WithUserData extends WithApplication {
var user = null
override def around[T: AsResult](t: => T): Result = super.around {
setupData()
t
deleteData()
}
def setupData() {
Logger.info("Running Before")
val passwordInfo = PasswordInfo("bcrypt", "$2a$10$at8N/GZHKDbHLh6er.UsbOUjVqx.IGebO2Wc7EmmD2m4tOlin7EAG")
val u = User(new IdentityId("harrypotter@naytev.com", UsernamePasswordProvider.UsernamePassword), "Harry",
"Potter", "Harry Potter", Option("harrypotter@naytev.com"), None, AuthenticationMethod.UserPassword,
None, None, Some(passwordInfo), None, None, "", Subscription.free, None, None, None, List(), None)
User.save(u)
Logger.info(s"Before User is before saving : var ${user} --- variable ${u}")
user = u
Logger.info(s"variable user is ${user}")
}
def deleteData(): Unit ={
Logger.info(s"After User is -> $user")
Logger.info("Removing the user")
User.remove(user)
}
}
然后在我的测试中,我喜欢这样使用它:
"with wrong password will not allow user to be logged in" in new WithUserData{
Logger.info(s"Running test 1 with User ${user}")
val fakeRequest = FakeRequest(POST, "/authenticate/userpass", FakeHeaders(), "").withFormUrlEncodedBody(("email" , user.email.get), ("password", "Blah"))
val request = route(fakeRequest).get
status(request) must equalTo(BAD_REQUEST)
}
上面的代码不会工作,并且会给出关于用户为空的奇怪错误,即使 before 首先运行。我有什么办法可以传递已保存的用户对象吗?我希望不必在每次测试时都查询对象。似乎有很多样板,应该在前后处理。
如有任何帮助,我们将不胜感激!
谢谢,
迈克
最佳答案
查看http://docs.scala-lang.org/tutorials/FAQ/initialization-order.html
你可以用蛋糕图案之类的东西
case class User(id: BigInt, name: String)
trait UserRepositoryComponent {
def userLocator: UserLocator
trait UserLocator {
def getUser: User
def removeUser(user: User)
}
}
trait UserTestRepositoryComponent extends UserRepositoryComponent {
def userLocator = new UserTestLocator
class UserTestLocator extends UserLocator {
override def getUser: User = User(1, "test user")
override def removeUser(user: User): Unit = ()
}
}
trait UserRealRepositoryComponent extends UserRepositoryComponent {
def userLocator = new UserRealLocator
class UserRealLocator extends UserLocator {
override def getUser: User = User(1, "real user")
override def removeUser(user: User): Unit = ()
}
}
trait UserServiceComponent {
this: UserRepositoryComponent =>
def getUser: User = userLocator.getUser
def removeUser(user: User) = userLocator.removeUser(user)
}
trait WithUserData {
this: UserServiceComponent =>
println(getUser)
}
object Main extends App {
val userDataFake: WithUserData = new WithUserData with UserServiceComponent with UserTestRepositoryComponent
val userDataReal: WithUserData = new WithUserData with UserServiceComponent with UserRealRepositoryComponent
}
或者类似 http://docs.scala-lang.org/tutorials/tour/implicit-parameters.html 的东西
关于scala - 创建测试范围/上下文以播种数据并运行应用程序,Scala Play Framework 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31304940/
从 PHP7 开始,为 PRNG 引入了一个新函数:random_int ( http://php.net/manual/en/function.random-int.php ) PHP 手册中没有与
在 .net 核心项目中,我像这样在 Program.cs 文件中播种: var host = BuildWebHost(args); using (var scope = host.Services
我有一张谷歌地图,上面有大约 200 个标记。使用谷歌距离矩阵服务,我可以找到从一个地址到 map 上所有标记的行驶距离。由于 API 限制,我每次调用只能提交 25 个目的地,因此我必须将操作分解为
下面的脚本抛出错误(自定义字段未定义)。我需要以不同的方式传递元素 ID 吗? 我正在尝试使用我要计算的表单字段来为数组播种。它应该迭代数组中的每个表单字段,并用表单元素的值递增 sum 变量。 jQ
我正在学习“Laravel 5 Essentials”中的教程。当我尝试使用命令为我的数据库播种时 php artisan db:seed 我收到错误 [ReflectionException]
我正在关注 docs为 users 表设置种子,该表显示正在使用 User::create class UserTableSeeder extends Seeder { public func
让我首先说明我要完成的任务: 我需要在一定范围内随机生成一组数字 我希望这些数字稍微均匀分布 我需要能够为随机数生成播种,这样,给定一个种子,生成的随机数将始终相同。 在对 drand48()、ran
这个问题在这里已经有了答案: Recommended way to initialize srand? (15 个答案) 关闭 9 年前。 我学习的方法是最初使用 srand(time(NULL))
SQLite 是否支持播种 RANDOM() 的功能与 MySQL 对 RAND() 的处理方式相同? $query = "SELECT * FROM table ORDER BY RAND(" .
我正在使用不支持的 Visual Studio 2010 ,所以我必须播种 default_random_engine .因此,我决定用 rand 播种它如下 srand((unsigned int
在 google OR-tools 库中,“原始”CP-Solver(此处讨论: https://developers.google.com/optimization/cp/original_cp_s
我正在尝试为 AspNetRole 表设置初始系统角色。 播种扩展: public static void EnsureRolesAreCreated(this IApplicationBuilder
我似乎无法弄清楚如何使用 Sequelize 为 ARRAY(ENUM) 播种。当我通过我的应用程序注册用户时,我可以很好地创建一个新用户,但是当我在种子文件中使用 queryInterface.bu
以下代码应创建两个具有相同种子的 Random 对象: System.out.println("System time before: " + System.currentTimeMillis());
尝试从集合中选择伪随机元素时,我看到了非确定性行为,即使 RNG 已播种(示例代码如下所示)。为什么会发生这种情况,我是否应该期望其他 Python 数据类型表现出类似的行为? 注意:我只在 Pyth
关于在 openssl/bn.h 中使用 BN_generate_prime 生成质数的内容,我无法找到答案。另外,我将如何播种此函数使用的任何 PRNG? 单独的问题但与我的代码相关(我正在编写一个
所以,我是 MEAN 堆栈的新手,我在尝试播种 MongoDB 时碰壁了。我正在使用 Mongoose 与数据库进行通信,并且有一堆文档建议我应该能够使用填充的 JSON 文件进行播种。 我尝试过的:
我有一个非常简单的情况:我想使用 testcontainers 测试 AWS 中现有的 mysql 数据库。 我遵循了官方指南( https://www.testcontainers.org/modu
我有一个很长(500K+ 行)的两列电子表格,如下所示: Name Code 1234 A 1234 B 1456 C 4556 A 4556 B 4556
我有一个要播种的数据透视表。除了 PK 和 FK,该表还包含另外两列:Arrival & Departure(类型:时间戳)。我正在使用 Carbon 随机填充前面的列。这是我的代码: $faker
我是一名优秀的程序员,十分优秀!