我想将一个Mockito模拟对象注入一个Spring(3+)bean中,以便使用JUnit进行单元测试.我的bean依赖项目前通过@Autowired在私有成员字段上使用注释来注入.
我考虑过使用ReflectionTestUtils.setField但我希望注入的bean实例实际上是一个代理,因此不会声明目标类的私有成员字段.我不希望为依赖创建一个公共setter,因为我将修改我的界面纯粹是为了测试的目的.
我遵循了Spring社区给出的一些建议,但是没有创建模拟并且自动连线失败:
<bean id="dao" class="org.mockito.Mockito" factory-method="mock">
<constructor-arg value="com.package.Dao" />
</bean>
Run Code Online (Sandbox Code Playgroud)
我目前遇到的错误如下:
...
Caused by: org...NoSuchBeanDefinitionException:
No matching bean of type [com.package.Dao] found for dependency:
expected at least 1 bean which qualifies as autowire candidate for this dependency.
Dependency annotations: {
@org...Autowired(required=true),
@org...Qualifier(value=dao)
}
at org...DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(D...y.java:901)
at org...DefaultListableBeanFactory.doResolveDependency(D...y.java:770)
Run Code Online (Sandbox Code Playgroud)
如果我将constructor-arg值设置为无效,则在启动应用程序上下文时不会发生错误.
请问您是否可以在Java中重载运算符?如果它在Java中的任何地方使用,请告诉我有关它的信息.
我的团队正在转向Spring 3.0,有些人想要开始将所有内容都移到Annotations中.当我看到一个类似这样的方法的类时,我的肠道感觉非常糟糕(代码味道?):(只是一个例子 - 不是所有真正的注释)
@Transaction
@Method("GET")
@PathElement("time")
@PathElement("date")
@Autowired
@Secure("ROLE_ADMIN")
public void manage(@Qualifier('time')int time) {
...
}
Run Code Online (Sandbox Code Playgroud)
我只是落后于时代,还是这对所有人来说都是一个可怕的想法?而不是使用诸如继承和多态的OO概念,现在通过约定或通过注释来实现一切.我只是不喜欢它.必须重新编译所有代码来改变IMO配置的东西似乎是错误的.但它似乎是一切(特别是春天)的方式.我应该"克服它"还是应该推回并尝试尽可能地保留我们的代码作为注释?
我目前正在尝试获取UIImageView中像素的alpha值.我从[UIImageView image]中获取了CGImage,并从中创建了一个RGBA字节数组.Alpha是预乘的.
CGImageRef image = uiImage.CGImage;
NSUInteger width = CGImageGetWidth(image);
NSUInteger height = CGImageGetHeight(image);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
rawData = malloc(height * width * 4);
bytesPerPixel = 4;
bytesPerRow = bytesPerPixel * width;
NSUInteger bitsPerComponent = 8;
CGContextRef context = CGBitmapContextCreate(
rawData, width, height, bitsPerComponent, bytesPerRow, colorSpace,
kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big
);
CGColorSpaceRelease(colorSpace);
CGContextDrawImage(context, CGRectMake(0, 0, width, height), image);
CGContextRelease(context);
Run Code Online (Sandbox Code Playgroud)
然后,我使用UIImageView中的坐标计算给定alpha通道的数组索引.
int byteIndex = (bytesPerRow * uiViewPoint.y) + uiViewPoint.x * bytesPerPixel;
unsigned char alpha = rawData[byteIndex + 3];
Run Code Online (Sandbox Code Playgroud)
但是我没有得到我期望的价值.对于图像的完全黑色透明区域,我得到alpha通道的非零值.我是否需要翻译UIKit和Core Graphics之间的坐标 - …
我有一个UIView,我试图使用[CALayer renderInContext:]渲染到UIImage中.但是,我发现结果图像是垂直翻转的.由于坐标系不同,我有点期待这一点.然而,我尝试用仿射变换将上下文恢复正常 - 但它没有任何影响:
CGAffineTransform flipVertical = CGAffineTransformMake(
1, 0, 0, -1, 0, imageContextHeight
);
CGContextConcatCTM(imageContext, flipVertical);
CGImageRef cgImage = CGBitmapContextCreateImage(imageContext);
UIImage* uiImage = [[UIImage imageWithCGImage:cgImage] retain];
CGImageRelease(cgImage);
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
StringBuffer sb1 = new StringBuffer("Java");
StringBuffer sb2 = new StringBuffer("Java");
System.out.println(sb1 == sb2);
System.out.println(sb1.equals(sb2));
Run Code Online (Sandbox Code Playgroud)
这两个都是假的.这怎么可能?
是否有特定的设计模式描述了提供非抽象默认实现的场景,该实现使用空的NO-OP实现实现接口上的所有或部分方法.这样做的目的是减轻子类的负担,实现他们自己可能不需要/使用的方法:
public interface MyInterface {
public void doThis();
public void doThat();
public void done();
}
public class MyClass implements MyInterface {
public void doThis() {
// NO-OP
}
public void doThat() {
// NO-OP
}
public void done() {
// Some standard implementation
}
}
public class MuSubClass extends MyClass {
public void doThat() {
// Subclass only cares about doThat()
}
}
Run Code Online (Sandbox Code Playgroud)
我已经看到过这种模式多次使用,包括SAX框架中的Java的DefaultHandler和MouseAdapter.在某些情况下,这些类被命名为Adapters,但我的印象是适配器模式在两个不同的接口之间进行转换.
鉴于在这些实例中只有一个声明的接口被转换为该接口的未定义子集 - 我不清楚这是如何在适配器模式的精神.
此外,我不太明白这是如何遵循NullObject模式的,因为某些方法可能有一个实现,而NullObject传统上是一个单例.
design-patterns adapter null-object-pattern solid-principles interface-segregation-principle
Objective-C类别的概念是否与mixins的概念类似?如果是这样的话:有什么相似之处?不是:有什么区别?
我已经将一些UIView子类重构为静态库.但是,当使用Interface Builder为使用静态库的项目创建视图组件时,我发现它不知道库类.我需要做些什么才能使Interface Interface对Interface Builder可见?
更新:正确答案是指将标题拖入"XIB浏览器".可以将".h"文件从取景器窗口拖动到此图像中标识的窗口区域:
alt text http://img211.imageshack.us/img211/1221/xibbrowser.png
有什么区别:
java.awt.*;
Run Code Online (Sandbox Code Playgroud)
和:
java.awt.event.*;
Run Code Online (Sandbox Code Playgroud)
我在许多程序中都找到了.
java ×4
iphone ×3
annotations ×2
uikit ×2
adapter ×1
coding-style ×1
import ×1
interface-segregation-principle ×1
junit ×1
mixins ×1
mockito ×1
objective-c ×1
spring ×1
xcode ×1