假设您在软件相当复杂的部分的功能测试中发现了一个错误.它可能源于数据库中的错误/意外数据,中间层代码或前端的某些内容.
精细.我们都去过那儿.
你有单元测试来编写和运行,调试/记录语句要插入,sql语句要编写和运行,你要用FireBug检查的东西等等.
假设第一步是提出您想要调查的潜在原因列表.
现在你必须决定做什么顺序.
你呢:
我有一种感觉,第一种策略是最常用的.也许只是因为我不与许多初级开发人员合作,而更多高级开发人员倾向于拥有体面的直觉.或许我们只是认为我们有不错的直觉,但应该使用更系统的方法.
有什么想法吗?
假设我有一个Thing具有state属性的类型A | B | C,
并且合法的状态转换是A->B, A->C, C->A.
我可以写:
transitionToA :: Thing -> Maybe Thing
Nothing如果Thing处于无法过渡的状态,它将返回A.
但是我想定义我的类型,并且过渡函数的转换方式只能在适当的类型上调用.
一个选项是创建单独的类型,AThing BThing CThing但在复杂的情况下似乎不可维护.
另一种方法是将每个状态编码为它自己的类型:
data A = A Thing
data B = B Thing
data C = C Thing
Run Code Online (Sandbox Code Playgroud)
和
transitionCToA :: C Thing -> A Thing
这对我来说似乎更清洁.但是我发现A,B,C是函数,除了转换函数之外,所有的函数都可以被映射.
使用类型类,我可以创建像:
class ToA t where
toA :: t -> A Thing
Run Code Online (Sandbox Code Playgroud)
哪个看起来更清洁了.
是否有其他首选方法可以在Haskell和PureScript中使用?
JProfiler提供实时调用树视图,因此您可以实时查看使用CPU的内容并深入了解详细信息.随时将计数重置为零,冲洗,重复.
我目前没有这个工具,并试图通过免费/开放替代方案.jvisualvm和NetBeans探查器具有静态快照调用树和实时平面视图.似乎有理由会有一个实时的调用树视图(或作为一个插件),但我似乎找不到一个.
这种功能仅适用于商业分析器吗?
谢谢.
我无法理解comparable榆树究竟是什么.榆树似乎和我一样困惑.
在REPL上:
> f1 = (<)
<function> : comparable -> comparable -> Bool
Run Code Online (Sandbox Code Playgroud)
所以f1接受可比较的.
> "a"
"a" : String
> f1 "a" "b"
True : Bool
Run Code Online (Sandbox Code Playgroud)
所以它似乎String具有可比性.
> f2 = (<) 1
<function> : comparable -> Bool
Run Code Online (Sandbox Code Playgroud)
所以f2接受可比的.
> f2 "a"
As I infer the type of values flowing through your program, I see a conflict
between these two types:
comparable
String
Run Code Online (Sandbox Code Playgroud)
所以,String 是和是不是媲美?
为什么类型f2不number …
find_in_batches不允许纯SQL(据我所见).
find_by_sql没有批量支持(据我所知).
那我该怎么做find_in_batches_by_sql呢?
SQL是令人讨厌的编程生成的东西,它指向第三方数据库,结果集可以返回数十万到数百万条记录.
我应该研究一下ActiveRecord的其他光标技巧吗?
谢谢.
是否可以用来==比较Elm中标记的联合类型的构造函数,或者你是否必须使用大小写?
例:
type alias Model =
{ accessToken : String
, page : Page
, config : Config
}
type Page
= Home String
| Profile String
menu : Model -> Html Msg
menu model =
div []
[ a [ href "#home", classList [ ("active", model.page == Home) ] ][ text "Home" ]
, a [ href "#profile", classList [ ("active", model.page == Profile)] ][ text "Profile" ]
]
Run Code Online (Sandbox Code Playgroud)
在这个例子中,我想写一些像model.page == Home来检查当前页面是否为Home,以便我可以在该链接上将css类设置为"active",但似乎我必须使用我可以做的一个案例,但对于这种情况实施起来有点尴尬.
我需要一个具有以下属性的安全(加密)哈希函数:
我能找到的最安全的散列函数在设计时考虑了速度/内存效率,因此编码很复杂.
目前的候选人是Mash-1(或Mash-2): 应用密码学手册.Google图书
谢谢.
编辑:到目前为止,谢谢大家的答案.请原谅我,如果以下是粗鲁的,我只想清楚.请相信我,我完成了我的作业并考虑了"标准"选项.我知道最简单的事情就是使用其中一种,但这不是我想要的.
我想回答的一个问题是:什么加密安全哈希算法可以用最少量的"可读"代码实现?
我已经发布了我能找到的最佳候选人.任何关于更简单的建议或关于Mash-1/2的评论都会有所帮助.
我有一个Tomcat服务器通过http将数据流传输到Java客户端.它将字节从文件复制到servlet中的HTTPServletResponse的输出流.
客户端使用HttpURLConnection连接和读取数据.
有时一切都很好,有时候客户端和服务器都会抛出异常.
客户说有一个"早产EOF".
服务器声称"ClientAbortException".
不仅仅是上述可能之一吗?
客户:
java.io.IOException: Premature EOF
at sun.net.www.http.ChunkedInputStream.fastRead(ChunkedInputStream.java:234)
at sun.net.www.http.ChunkedInputStream.read(ChunkedInputStream.java:662)
at java.io.FilterInputStream.read(FilterInputStream.java:116)
at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:2669)
at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:2664)java.io.IOException: Premature EOF
at sun.net.www.http.ChunkedInputStream.fastRead(ChunkedInputStream.java:234)
at sun.net.www.http.ChunkedInputStream.read(ChunkedInputStream.java:662)
at java.io.FilterInputStream.read(FilterInputStream.java:116)
at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:2669)
at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:2664)
Run Code Online (Sandbox Code Playgroud)
服务器:
ClientAbortException: java.io.IOException
at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:358)
at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:434)
at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:349)
at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:381)
at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:370)
at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:89)
...
Caused by: java.io.IOException
at org.apache.coyote.ajp.AjpAprProcessor.flush(AjpAprProcessor.java:1223)
at org.apache.coyote.ajp.AjpAprProcessor$SocketOutputBuffer.doWrite(AjpAprProcessor.java:1310)
at org.apache.coyote.Response.doWrite(Response.java:560)
at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:353)
... 23 more
Run Code Online (Sandbox Code Playgroud) 我想向QUnit添加新的断言.我做了一件事:
QUnit.extend(QUnit.assert, {
increases: function(measure, block, message){
var before = measure();
block();
var after = measure();
var passes = before < after;
QUnit.push(passes, after, "< " + before, message);
}
});
Run Code Online (Sandbox Code Playgroud)
当我increases(foo,bar,baz)在我的测试中使用时,我得到了
ReferenceError:未定义增量
从浏览器控制台,我可以看到increases在发现QUnit.assert以及所有其他标准功能:ok,equal,deepEqual等.
从控制台,运行:
test("foo", function(){console.log(ok) });
我看到的来源ok.
跑步:
test("foo", function(){console.log(increases) });
我被告知增加没有定义.
在测试中使用增加所需的魔力是什么?此外,哪里(如果有的话)是文件?
谢谢
在例外情况下,sidekiq中的作业将被置于重试队列中.
因此,并且因为任务是异步运行的, MyWorker.perform_async(...)所以永远不会抛出在任务代码中生成的异常.
但是,在测试中,任务中发生的异常不会导致任务放入重试队列.异常泡沫了perform_async.
因此,在测试中发生的事情是运行代码时不可能发生的事情.
那么,什么是测试代码的最佳方法,这些代码会触发可能失败的作业并被置于重试队列中?
请注意,以下似乎对测试没有影响:
Sidekiq.default_worker_options = { :retry => true}
elm ×2
java ×2
unit-testing ×2
activerecord ×1
cryptography ×1
debugging ×1
exception ×1
hash ×1
haskell ×1
http ×1
javascript ×1
jprofiler ×1
jvisualvm ×1
netbeans ×1
profiling ×1
purescript ×1
qunit ×1
ruby ×1
scheme ×1
sidekiq ×1
sql ×1
tomcat ×1
union-types ×1