是否有可能以通用方式拦截模拟上的所有方法调用?
例
给定供应商提供的类如:
public class VendorObject {
public int someIntMethod() {
// ...
}
public String someStringMethod() {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
我想创建一个模拟,将所有方法调用重定向到另一个具有匹配方法签名的类:
public class RedirectedToObject {
public int someIntMethod() {
// Accepts re-direct
}
}
Run Code Online (Sandbox Code Playgroud)
Mockito中的when().thenAnswer()构造似乎符合要求,但我无法找到一种方法来匹配任何方法调用与任何args.无论如何,InvocationOnMock肯定会给我所有这些细节.有没有通用的方法来做到这一点?看起来像这样的东西,其中when(vo.*)被适当的代码替换:
VendorObject vo = mock(VendorObject.class);
when(vo.anyMethod(anyArgs)).thenAnswer(
new Answer() {
@Override
public Object answer(InvocationOnMock invocation) {
// 1. Check if method exists on RedirectToObject.
// 2a. If it does, call the method with the args and return the result.
// 2b. If it …Run Code Online (Sandbox Code Playgroud) 给定以下XML配置文件:
<main>
<name>JET</name>
<maxInstances>5</maxInstances>
<parameters>
<a>1</a>
<b>
<b1>test1</b1>
<b2>test2</b2>
</b>
</parameters>
</main>
Run Code Online (Sandbox Code Playgroud)
我需要提取name和maxInstances元素的值,然后提取参数元素的整个内部文本.例如
name = "JET"
maxInstances = 5
parameters = "<a>1</a><b><b1>test1</b1><b2>test2</b2></b>"
Run Code Online (Sandbox Code Playgroud)
最终,参数块可以包含任何格式良好的XML.
以下代码适用于name和maxInstances,但不适用于参数:
@XmlRootElement(name="main")
public class Main {
@XmlElement(name="name", required="true")
private String name;
@XmlElement(name="maxInstances", required="true")
private Integer maxInstances;
@XmlElement(name="parameters")
private String parameters;
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试过基于以下想法的解决方案,但找不到合适的东西.
我可以使用不同的类型来表示我可以解析以生成字符串的XML树的参数对象吗?例如
@XmlElement(name="parameters")
private XmlNodeObject parametersNode;
public String getParameters() {
// Collapse node to single line of text
return innerText;
}
Run Code Online (Sandbox Code Playgroud)
或者我需要使用一些不同类型的注释?
@XmlSpecialAnnotation(...)
@XmlElement(name="parameters")
private String parameters;
Run Code Online (Sandbox Code Playgroud)
我是否需要切换到不同风格的解析器?使用两种样式的解析器是好/坏的想法?
我正在尝试在C#应用程序中复制Java应用程序的逻辑.部分原因是生成密码的SHA-1哈希.不幸的是,我无法从Java和C#获得相同的结果.
C# Output : 64 0a b2 ba e0 7b ed c4 c1 63 f6 79 a7 46 f7 ab 7f b5 d1 fa Java Output: 164 10a b2 ba e0 17b ed c4 c1 163 f6 179 a7 146 f7 ab 17f b5 d1 fa
为了弄清楚发生了什么,我一直在Eclipse和Visual Studio中使用Debugger.
1. Check values of byte[] key:
Java: { 84, 101, 115, 116 }
C# : { 84, 101, 115, 116 }
2. Check value of byte[] hash:
Java: { 100 10 …