对于我的单元测试,我想设置一个数据库,用基本信息填充它,并在会话中运行每个测试,以回滚对数据库所做的所有更改,以便始终为每个测试提供一个原始副本.
我正在寻找类似的东西
db withSession {
<create my objects under test>
<run operations>
<run asserts>
this.rollback()
}
Run Code Online (Sandbox Code Playgroud)
回滚功能是在Scala Query的早期版本中,但它现在似乎缺失了.我该如何实现此功能?
最好的祝福
试图学习用Gtk2Hs编写应用程序我遇到了困难,弥合了事件驱动的Gtk2HS与模型的持久状态之间的差距.所以为了简化,让我说我有这个简单的应用程序
module Main where
import Graphics.UI.Gtk
import Control.Monad.State
main = do
initGUI
window <- windowNew
button <- buttonNew
set button [buttonLabel := "Press me"]
containerAdd window button
-- Events
onDestroy window mainQuit
onClicked button (putStrLn ---PUT MEANINGFUL CODE HERE---)
widgetShowAll window
mainGUI
Run Code Online (Sandbox Code Playgroud)
我的应用程序的状态是按下按钮的次数.看到像这样的其他帖子,他们依赖于MVars或IORefs,这对我来说似乎并不令人满意,因为将来也许我会想要重构代码,以便状态存在于自己的上下文中.
我认为解决方案应该使用状态monad使用步骤函数,如:
State $ \s -> ((),s+1)
Run Code Online (Sandbox Code Playgroud)
但我不确定其含义,如何在上面的代码中执行此操作,或者即使该monad是我的问题的正确解决方案.
我有一个元素的迭代器,我想消耗它们,直到下一个元素满足条件,如:
val it = List(1,1,1,1,2,2,2).iterator
val res1 = it.takeWhile( _ == 1).toList
val res2 = it.takeWhile(_ == 2).toList
Run Code Online (Sandbox Code Playgroud)
res1给出一个预期List(1,1,1,1)但res2返回,List(2,2)因为迭代器必须检查位置4中的元素.
我知道列表将被订购,所以没有必要像遍历那样遍历整个列表partition.我希望在条件不满足时立即完成.是否有任何聪明的方法与迭代器一起做这个?我不能toList对迭代器做一个因为它来自一个非常大的文件.
我正在开发一个C++应用程序(在Linux机器中运行),它非常密集地读取日志文件并将派生结果写入磁盘.我想知道哪些是优化这类应用程序的最佳实践:
有一个很好的阅读,我可以得到这个基础知识,所以我可以调整现有的技术诀窍我的问题?
谢谢
我有一个用Java编写的客户端 - 服务器应用程序,使用CORBA进行通信.使用的ORB是orbd,Java6平台提供的ORBd.我必须用另一个用C++编写的实现替换Java服务器实现.那么问题是,在CORBA库的自由源实现中,哪个更好地与这个ORB互操作?我应该替换Java ORB还使用C++库提供的ORB吗?
目标是在使用新的C++实现替换已经运行的服务器时,可以轻松平滑地进行转换.还有什么我应该考虑的吗?
我想覆盖所有存储库,甚至是我的build.sbt文件中无意中引入的存储库,因此我们可以指向代理服务器,并为所有团队提供一个通用的二进制库。选项
$ sbt -Dsbt.override.build.repos=true
Run Code Online (Sandbox Code Playgroud)
做这项工作,但我想将此选项永久化。我一直在看http://www.scala-sbt.org/release/docs/Global-Settings.html,但是我不知道如何将该选项转换为global.sbt他们提到的文件。
您将如何全局配置该选项?
说我有两个来源:
val ticks = Source(1 to 10)
val values = Source[Int](Seq(3,4,4,7,8,8,8,8,9).to[collection.immutable.Iterable])
Run Code Online (Sandbox Code Playgroud)
我想Graph[...]在Akka Stream中创建一个处理步骤,该步骤基于ticks它在值流中尽可能多地消耗的流的当前值.因此,例如,当值匹配时,我想返回第二个源中匹配的所有元素,否则保持滴答声,从而产生如下输出:
(1, None)
(2, None)
(3, Some(Seq(3)))
(4, Some(Seq(4, 4)))
(5, None)
(6, None)
(7, Some(Seq(7)))
(8, Some(Seq(8,8,8,8)))
(9, Some(Seq(9)))
(10, None)
Run Code Online (Sandbox Code Playgroud)
你会如何实现这种行为?
假设你有这个 AVDL 作为一个简化的例子:
@namespace("example.avro")
protocol User {
record Man {
int age;
}
record Woman {
int age;
}
record User {
union {
Man,
Woman
} user_info;
}
}
Run Code Online (Sandbox Code Playgroud)
在 python 中,您无法正确序列化声明类型的对象,因为不允许使用以下语法:
{"user_info": {"Woman": {"age": 18}}}
Run Code Online (Sandbox Code Playgroud)
唯一被序列化的对象是
{"user_info": {"age": 18}}
Run Code Online (Sandbox Code Playgroud)
丢失所有类型信息并且DatumWriter通常选择匹配字段集的第一条记录,在本例中为 a Man。
使用 Java API 时,上述问题非常有效。
那么,我在这里做错了什么?序列化和反序列化在 Python 的 Avro 实现中是否可能不是幂等的?
我有一些抽象数据库及其业务逻辑的 Python 代码。单元测试已经涵盖了这段代码,但现在我需要针对不同的数据库(MySQL、SQLite 等)测试这段代码。
使用不同配置通过同一组测试的默认模式是什么?我的目标是确保抽象层独立于底层数据库按预期工作。如果这有帮助,我正在使用鼻子测试来运行测试,但它似乎缺乏套件测试概念
此致。
我正在尝试实现一个简单的属性检查,但Scalacheck忽略了我的生成器.我在这里做错了什么?
object AlgorithmTest extends Properties("Algorithm") {
property("Test") = forAll (Gen.choose(0,10)) (n => n>=0 & n<10)
}
Run Code Online (Sandbox Code Playgroud)
这是SBT的结果
[info] ! Algorithm.Test: Falsified after 12 passed tests. [info] >
ARG_0: -1 [error] Failed: : Total 1, Failed 1, Errors 0, Passed 0,
Skipped 0
Run Code Online (Sandbox Code Playgroud) scala ×4
c++ ×2
python ×2
sbt ×2
akka-stream ×1
avro ×1
avro-tools ×1
c ×1
corba ×1
database ×1
disk ×1
gtk2hs ×1
haskell ×1
io ×1
iteration ×1
iterator ×1
java ×1
nosetests ×1
performance ×1
scalacheck ×1
scalaquery ×1
sql ×1
state-monad ×1
unit-testing ×1