我在单元测试中使用RoboGuice和AndroidMock框架时遇到问题.我已经创建了一个简单的项目来显示我的问题.在这里,我创建一个模拟实例并在RoboGuice中注册它.但是该过程在"setUp()"和"test01()"方法之间崩溃.正如我猜的那样,实际上当创建Injector时进程崩溃,如果任何模块内部有一个模拟实例.
如果我用实现接口的类的实例替换模拟的实例,那么一切正常.
有人知道如何解决这个问题吗?
这是我的测试代码:
public class testInjectMock extends RoboUnitTestCase<MyApplication> {
protected void setUp() throws Exception {
InterfaceToMock instance = AndroidMock.createNiceMock(InterfaceToMock.class); AndroidMock.expect(instance.SimpleMethod()).andStubReturn("Hello!");
MyModule myMockModule = new MyModule();
myMockModule.setMockedInstance(instance);//Comment this string to get into the test01() method
MyApplication.setMyModule(myMockModule);
super.setUp();
}
public void test01() {
//It never comes here
}
}
Run Code Online (Sandbox Code Playgroud)
模块源代码:
public class MyModule extends AbstractAndroidModule {
protected InterfaceToMock mockedInstance;
public void setMockedInstance(InterfaceToMock mockedInstance) {
this.mockedInstance = mockedInstance;
}
@Override
protected void configure() {
if(mockedInstance != null)
bind(InterfaceToMock.class).toInstance(mockedInstance);
}
}
Run Code Online (Sandbox Code Playgroud)
logcat输出:
05-23 …Run Code Online (Sandbox Code Playgroud) 我在StackOverflow中经历了很多问题,能够开发小程序来正确检测正方形和矩形.这是我的示例代码
public static CvSeq findSquares(final IplImage src, CvMemStorage storage) {
CvSeq squares = new CvContour();
squares = cvCreateSeq(0, sizeof(CvContour.class), sizeof(CvSeq.class), storage);
IplImage pyr = null, timg = null, gray = null, tgray;
timg = cvCloneImage(src);
CvSize sz = cvSize(src.width(), src.height());
tgray = cvCreateImage(sz, src.depth(), 1);
gray = cvCreateImage(sz, src.depth(), 1);
// cvCvtColor(gray, src, 1);
pyr = cvCreateImage(cvSize(sz.width() / 2, sz.height() / 2), src.depth(), src.nChannels());
// down-scale and upscale the image to filter out the noise
// cvPyrDown(timg, pyr, CV_GAUSSIAN_5x5);
// …Run Code Online (Sandbox Code Playgroud) 我无法访问来自https://jersey.java.net/的球衣文档
球衣文件是否已移至新位置?
我有一个字符串形式的令牌,我下载了公共证书并从中创建了一个公钥,如下所示。
但我不确定如何使用这么多信息进行验证。
我找到了适用于 C# 和 .NET 的解决方案,但没有找到适用于 Java 的解决方案。请注意,我没有 jks 文件或私钥。
FileInputStream fin = new FileInputStream("d://public.crt");
CertificateFactory f = CertificateFactory.getInstance("X.509");
X509Certificate certificate = (X509Certificate)f.generateCertificate(fin);
PublicKey pk = certificate.getPublicKey();
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Groovy和Java的ScriptEngine API来解析XML.下面的代码正是如此,但我想知道是否有更好的方法来做同样的事情.还有与此相关的性能影响吗?
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
/*
<books>
<book id="1">
<name>"Catcher In the Rye"</name>
<author>J.D. Salinger</author>
</book>
<book id="2">
<name>"KiteRunner"</name>
<author>Khaled Hosseini</author>
</book>
</books>
*/
public class XMLParsing{
public static void main(String[] args) {
Map<String, ArrayList<String>> resultMap
= new HashMap<String, ArrayList<String>>();
resultMap = getBookDetails("c:\\temp\\book.xml");
System.out.println(resultMap);
}
public static Map<String ArrayList<String>> getBookDetails(String scriptXml) {
Map<String, ArrayList<String>> resultMap =
new HashMap<String, ArrayList<String>>();
ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine engine = factory.getEngineByName("groovy");
String …Run Code Online (Sandbox Code Playgroud) 由于每的Javadoc的IdentityHashMap,它说
此类
Map使用哈希表实现接口,在比较键(和值)时使用引用相等性代替对象相等性.换句话说,在a中IdentityHashMap,当且仅当如此时,认为两个键k1和k2相等(k1==k2).(在正常Map实现中(例如HashMap),当且仅当两个键k1和k2被认为是相等的时(k1==null ? k2==null : k1.equals(k2)).)
据我所知,指向不同内存位置的两个不同对象仍然可以具有相同的哈希码,因此object1.equals(object2)可以返回true.但指向不同的内存位置的两个不同的对象永远不能返回true的object1 == object2.
问题1 - 当IdentityHashMap严格依赖参考平等时,这是否意味着永远不会发生碰撞?
问题2 - 调试以下代码显示了6个桶,其中key和value都存储在不同的存储桶中.但事实并非如此HashMap,其中密钥和值存储在同一个存储桶中.
因为它的名字中有一个'hash'字样,所以它必须对键进行散列,那么为什么它分别存储键和值以及它如何检索给定键的值?
String A = "abc";
String B = "def";
String C = new String("abc");
Map<String, String> map1 = new IdentityHashMap<String, String>();
map1.put(A, "123");
map1.put(B, "345");
map1.put(C, "567");
Run Code Online (Sandbox Code Playgroud) 我创建了一个包含所有内容的pacman游戏,但问题是幽灵及其动画需要大量代码.
例:
每个幽灵需要3个if语句,此刻每个幽灵有20行代码,如果我在游戏中有3个鬼,那就是3 x 20 = 60行无用编码.
用我的PHP经验,我会说..使用foreach循环或类似的东西..但我应该如何在Java中这样做?有人可以举个例子吗?我现在这样做的方式发表如下:
创造幽灵物体;
DrawPacMan ghost1 = new DrawPacMan();
DrawPacMan ghost2 = new DrawPacMan();
Run Code Online (Sandbox Code Playgroud)
这幅画如下:
int g1x = 0;
boolean g1r = true;
public void paintComponent(Graphics g) {
super.paintComponent(g);
// pacman movement
diameter = 75;
pacman.drawPacMan(g, getHorPlaats(), getVerPlaats(), diameter, getView(), Color.yellow);
// ghosts movement
if(g1r == true) {
g1x += ghostSpeed;
}
if(g1r == false) {
g1x -= ghostSpeed;
}
if(g1x == 500 || g1x == 0) {
g1r = !g1r;
}
System.out.println(g1r);
ghost1.drawGhost(g, g1x, …Run Code Online (Sandbox Code Playgroud)