小编Jon*_*han的帖子

当看起来没问题时,Mockito会给出UnfinishedVerificationException

UnfinishedVerificationException当我认为我已经完成了所有事情时,Mockito似乎正在投掷.这是我的部分测试用例:

HttpServletRequest req = mock(HttpServletRequest.class);
when(req.getHeader("Authorization")).thenReturn("foo");

HttpServletResponse res = mock(HttpServletResponse.class);

classUnderTest.doMethod(req, res); // Use the mock

verify(res, never());
verify(req).setAttribute(anyString(), anyObject());
Run Code Online (Sandbox Code Playgroud)

这是部分类和方法:

class ClassUnderTest extends AnotherClass {
    @Override
    public String doMethod(ServletRequest req, ServletRequest res) {
        // etc.
        return "someString";
    }
}
Run Code Online (Sandbox Code Playgroud)

忽略你不应该模仿你不拥有的接口的事实,为什么Mockito给我以下信息?

org.mockito.exceptions.misusing.UnfinishedVerificationException: 
Missing method call for verify(mock) here:
-> at (redacted)

Example of correct verification:
    verify(mock).doSomething()

Also, this error might show up because you verify either of: final/private/equals()/hashCode() methods.
Those methods *cannot* be stubbed/verified.

at [test method name and …
Run Code Online (Sandbox Code Playgroud)

junit unit-testing mockito junit5

37
推荐指数
5
解决办法
3万
查看次数

Clojure中'()和(list)之间有什么区别?

Lists上的API Cheatsheet部分似乎表明它'()是一个列表构造函数,就像(list),但我发现在实践中它们并不完全相同.例如,给定:

(def foo "a")
(def bar "b")
(def zip "c")
Run Code Online (Sandbox Code Playgroud)

以下声明:

(apply str '(foo bar zip))
Run Code Online (Sandbox Code Playgroud)

产生输出"foobarzip",我不指望.

但据称相当于:

(apply str (list foo bar zip))
Run Code Online (Sandbox Code Playgroud)

正如我所料,产生"abc".

这里发生了什么?如果在Clojure中有一个列表的"简写"(比如{}地图和[]向量),它是什么?

clojure

20
推荐指数
3
解决办法
1782
查看次数

除非使用Leiningen REPL,否则Clojure jdbc create-table语句不会运行

我有一个小的Clojure程序,它使用Clojure JDBC工具在HSQL数据库中创建一个表.但是,如果我从Leiningen的REPL运行它,它似乎只是实际创建表.如果我使用lein runIDE或从我的IDE(IntelliJ)运行代码,它不会创建表.没有例外报道.在这两种情况下,输出只是"(0)".

这是代码片段:

(ns tramway.core
  (:require [clojure.java.io :as io]
            [clojure.java.jdbc :as sql]))

(def hsql-db {:subprotocol "hsqldb"
              :subname "file:/tmp/tramwaydb"
              :user "SA"
              :password ""})

(defn -main []
  (println (sql/with-connection hsql-db (sql/create-table
                                 :footfall
                                 [:id "INTEGER" "GENERATED ALWAYS AS IDENTITY(START WITH 1)"]
                                 [:sample_date "DATE"]
                                 [:exhibition "varchar(255)"]))))
Run Code Online (Sandbox Code Playgroud)

因为我正在使用Leiningen,所以这是我的project.clj:

(defproject tramway "1.0.0-SNAPSHOT"
  :description "Description here"
  :dependencies [[org.clojure/clojure "1.3.0"]
                 [org.clojure/java.jdbc "0.1.4"]
                 [org.hsqldb/hsqldb "2.2.8"]]
  :main tramway.core)
Run Code Online (Sandbox Code Playgroud)

如果我做:

$ lein repl

tramway.core=> (-main)
(0)
nil
Run Code Online (Sandbox Code Playgroud)

然后检查/tmp/tramway.log我可以看到CREATE TABLE执行成功.

但是,如果我这样做: …

clojure hsqldb leiningen

8
推荐指数
1
解决办法
1049
查看次数

不使用公共CDN加载Javascript库是否有好处?

我听说所有的情况都支持使用像谷歌API这样的CDN 来托管我的网络应用程序的JQuery和Prototype等JavaScript库.它更快,节省带宽,允许并行加载脚本等等.但我最近在Douglas Crockford的json2.js脚本中发现了以下评论:

使用您自己的复印件.非常不愿意从您无法控制的服务器加载代码.

我很好奇他的论点背后可能是什么,以及它是否专门针对谷歌等公共CDN的用户,还是其他什么?

javascript cdn google-cdn

6
推荐指数
1
解决办法
1225
查看次数

将子模块中的applet添加到Maven中的WAR文件中

我有一个带有两个子模块的Maven2项目,如下所示:

parentproject
|---war-file-project
|---applet-project
Run Code Online (Sandbox Code Playgroud)

每个POM中都有适当的父模块关系.它applet-project包含一个简单的applet,并使用JAR包装进行设置.它war-file-project包含一个简单的WAR文件项目,并使用WAR包装进行设置.

当我建,我想,以确保该WAR文件包含生成的JAR文件applet-project/applets目录.

我该怎么做呢?

java applet maven-2 war

6
推荐指数
1
解决办法
3843
查看次数

如何使用Java 6针对Java 1.4库构建Java项目?

我有一个最初是为Java 1.4编写的项目,但我的Mac上只有Java 6,我无法安装Java 1.4.

通常,我会使用这样的一行来编译:

javac -source=1.4 -target=1.4 MyClass.java
Run Code Online (Sandbox Code Playgroud)

但是,MyClass.java实现了java.sql.ResultSet接口,它在Java 6中添加了几个新方法,因此我得到了如下编译错误:

MyClass is not abstract and does not override abstract method
updateNClob(java.lang.String,java.io.Reader) in java.sql.ResultSet
Run Code Online (Sandbox Code Playgroud)

我不能简单地实现缺少的方法,因为许多使用泛型,这在Java 1.4中是不可用的.

似乎解决方案是获取和编译Java 1.4 JAR.所以,我有几个问题:

  1. 有没有更好的办法?
  2. 如何指定我的Java 1.6 javac我想使用1.4 JAR而不是Java 6 JAR?
  3. 这甚至可以工作,如果是的话,项目是否会运行在Java 1.4和Java 6上?
  4. 我怎么在Maven这样做?

谢谢!

java macos maven

6
推荐指数
1
解决办法
1012
查看次数

如何为两条腿OAuth提供商存储消费者秘密?

我正在实施用于API身份验证的两条腿OAuth协议的提供程序端.我们将向消费者提供消费者密钥和秘密,他们将使用这些密钥和密钥来签署请求.两条腿OAuth由互操作性标准决定,因此是一项要求.

秘密类似于密码,我通常不会将密码存储为纯文本(bCrypt或类似的将是我的正常选择).但是因为我的提供者需要访问纯文本秘密来验证签名,所以它必须是一些纯文本或可逆形式.

我考虑过以下选项:

将秘密存储为纯文本

这是最明显的解决方案,但如果数据库以某种方式受到损害,那么所有的秘密都必须改变.对我来说,这个解决方案并不理想,因为它具有以纯文本形式存储密码的所有问题.

使用存储在其他位置的加密密钥应用可逆加密(例如AES)

这将提供一些安全性,因为如果数据库被泄露,那么秘密仍然是安全的.但是可逆加密需要加密密钥,密钥必须存储在服务器上.这意味着如果攻击者破坏了计算机,则可以规避加密.

有什么我没有想到的吗?

澄清有效地,它使用2腿Oauth作为单点登录系统.'consumer'创建一个请求,包括使用者密钥,nonce和其他几个参数.然后通过计算具有消费者秘密的HMAC-SHA1来签署整个请求.当请求到达我们的提供者系统时,重复该过程,如果签名匹配,则继续请求处理.因此,我们需要明文秘密来计算我们方面的HMAC-SHA1签名.不幸的是,这种机制是由我们需要遵守的行业标准协议决定的.

security oauth password-protection

5
推荐指数
1
解决办法
1875
查看次数

使用临时表替换 WHERE IN 子句

我让用户输入我需要在表中查询的值列表。该列表可能非常大,并且长度在编译时未知。我认为使用WHERE ... IN (...)临时表并对其执行联接会更有效,而不是使用它。我在另一个SO问题中读到了这个建议(目前找不到它,但会在找到时进行编辑)。

要点是这样的:

CREATE TEMP TABLE my_temp_table (name varchar(160) NOT NULL PRIMARY KEY);

INSERT INTO my_temp_table VALUES ('hello');
INSERT INTO my_temp_table VALUES ('world');
//... etc

SELECT f.* FROM foo f INNER JOIN my_temp_table t ON f.name = t.name;

DROP TABLE my_temp_table;
Run Code Online (Sandbox Code Playgroud)

如果我同时运行其中两个,那么如果线程 2 尝试在线程 1 之后创建 TEMP 表,我不会收到错误吗?

我应该为 TEMP 表随机生成一个名称吗?

或者,如果我将整个事情包装在一个事务中,命名冲突会消失吗?

这是 PostgreSQL 8.2。

谢谢!

sql postgresql transactions temp-tables

5
推荐指数
1
解决办法
7120
查看次数

JAXP XSLT转换器默认使用错误的实现

我有一个Tomcat 5.5 Web应用程序,它使用Apache Commons-Configuration库在运行时生成XML配置文件.反过来,Commons-Configuration使用javax.xml.transformJAXP API来完成此任务.

自升级到Java 7以来,操作失败,并显示以下错误消息:

Caused by: javax.xml.transform.TransformerFactoryConfigurationError: Provider org.apache.xalan.processor.TransformerFactoryImpl not found
    at javax.xml.transform.TransformerFactory.newInstance(Unknown Source)
Run Code Online (Sandbox Code Playgroud)

在过去的版本中,我从未捆绑过xalan.jar,而是依赖于平台默认的XSLT实现.

我检查过的一些事情:

  • META-INF/services/javax.xml.transform.TransformerFactory我的任何应用程序JAR文件,库jar或Tomcat jar中都没有条目
  • javax.xml.transform.TransformerFactory系统属性未设置(在通过JVisualVM运行时验证)
  • 目录中没有jaxp.properties文件jre/lib

运行with -Djaxp.debug=1会产生以下输出:

JAXP: find factoryId =javax.xml.transform.TransformerFactory
JAXP: loaded from fallback value: org.apache.xalan.processor.TransformerFactoryImpl
Run Code Online (Sandbox Code Playgroud)

这个后备价值来自哪里?Oracle发布了Xalan变压器,但由于1.7已将其重新打包为com.sun.org.apache.xalan.processor....不应该是回退值?

java xslt tomcat jaxp

5
推荐指数
1
解决办法
9552
查看次数

为什么 xmlstarlet 说没有“ends-with”函数?

我正在使用xmlstarletchangeSetliquibase XML 变更日志中提取viewName以“v”结尾的节点。

然而,xmlstarlet 抱怨ends-withXPATH 函数不存在:

$ xmlstarlet sel -N x="http://www.liquibase.org/xml/ns/dbchangelog" -t -m \
"/x:databaseChangeLog/x:changeSet[x:createView[ends-with(@viewName, 'v')]]" \
-c . public.db.changelog.xml

xmlXPathCompOpEval: function ends-with not found
Unregistered function
Stack usage errror
xmlXPathCompiledEval: 3 objects left on the stack.
runtime error: element for-each
Failed to evaluate the 'select' expression.
None of the XPaths matched; to match a node in the default namespace
use '_' as the prefix (see section 5.1 in the manual).
For …
Run Code Online (Sandbox Code Playgroud)

xpath xmlstarlet

3
推荐指数
1
解决办法
2016
查看次数