我正在学习如何使用OCMock来测试我的iPhone项目,我有这样的场景:带有getHeightAtX:andY:
方法的HeightMap类和使用的Render类HeightMap
.我正在尝试使用一些HeightMap
模拟单元测试渲染.这有效:
id mock = [OCMockObject mockForClass:[Chunk class]];
int h = 0;
[[[mock stub] andReturnValue:OCMOCK_VALUE(h)] getHeightAtX:0 andY:0];
Run Code Online (Sandbox Code Playgroud)
当然,仅适用于x=0
和y=0
.我想测试使用"平面"高度图.这意味着我需要做这样的事情:
id chunk = [OCMockObject mockForClass:[Chunk class]];
int h = 0;
[[[chunk stub] andReturnValue:OCMOCK_VALUE(h)] getHeightAtX:[OCMArg any] andY:[OCMArg any]];
Run Code Online (Sandbox Code Playgroud)
但这引发了两个编译警告:
警告:
'getHeightAtX:andY:'
从没有强制转换的指针传递整数的参数1
和运行时错误:
调用了意外的方法:
'getHeightAtX:0 andY:0 stubbed: getHeightAtX:15545040 andY:15545024'
我错过了什么?我发现无法传递anyValue
给这个模拟器.
出于审美原因,我决定改变这个:
if ((self = [super init])) {
// init self
}
return self;
Run Code Online (Sandbox Code Playgroud)
进入:
if (!(self = [super init])) return nil;
// init self
return self;
Run Code Online (Sandbox Code Playgroud)
从理论上讲,他们做同样的事情.第一个是经典的方式,简单的工作.调试第二个,我发现它几乎工作."if"是正确的,init代码也是,但是,在返回"self"之后,调试器返回到"if"并返回nil!
我用第二个类创建的所有类我都使用"正确"的方式,因为它们以nil启动,但我真的想知道为什么它会像那样!我担心这可能是其他错误的结果!
我的程序中有这个块:
if (x > 0) {
a = 1;
b = 4;
} else {
a = 2;
b = 3;
}
Run Code Online (Sandbox Code Playgroud)
这可以用这样的三元运算编写:
a = (x > 0) ? 1 : 2;
b = (x > 0) ? 4 : 3;
Run Code Online (Sandbox Code Playgroud)
结果是等价的,但它是我应用程序真正关键部分的一部分,每秒运行数千次.我想挤一些微秒,因为这种方法会增长一点.
我的问题:在ARM级别,哪一个更快?我相信第一个创建分支指令.但三元运作怎么样?它也成为iPhone上的一个分支吗?或iPhone的ARM有一个邪恶的操作码来完成这项工作?
顺便说一句,我也看到了这样一种邪恶的技巧:
a = (x > 0) * 1 + (x <= 0) * 2;
Run Code Online (Sandbox Code Playgroud)
这真的更快吗?
鉴于这个非常简单的Wicket组件:
public class ProductImage extends WebComponent {
public ProductImage(String id, Product p) {
super(id, new Model(p));
add(new AttributeModifier("src", true, new Model(p.getImage())));
}
}
Run Code Online (Sandbox Code Playgroud)
如何使用WicketTester进行单元测试?我需要一个页面吗?
我正在开发一个使用Wicket来呈现页面的电子商务.我有一个主页布局的"BasePage",在我的"感谢您购买"页面中,我想添加Google Analytics电子商务跟踪代码.作为参考,JS代码如下:
<script type="text/javascript>
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-12345678-9']);
_gaq.push(['_addTrans', '123', '', '12.56', '', '5.00']);
_gaq.push(['_addItem', '123', 'sku-1', 'Product 1', 'Category X', '12.56', '1']);
_gaq.push(['_addItem', '123', 'sku-2', 'Product 2', 'Category Y', '13.45', '1']);
_gaq.push(['_trackTrans']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
Run Code Online (Sandbox Code Playgroud)
购物车和结账的HTML代码很简单,但是如何使用Wicket动态生成这个JS?
ios ×2
wicket ×2
xcode ×2
arm ×1
components ×1
iphone ×1
java ×1
objective-c ×1
ocmock ×1
primitive ×1
unit-testing ×1