小编Cha*_*Liu的帖子

使用Mockito模拟另一个类中的类方法

我正在尝试使用Mockito/JUnit为这样的函数编写单元测试:

class1 {
 method {
  object1 = class2.method // method that I want to fake the return value
  // some code that I still want to run
 }
}
Run Code Online (Sandbox Code Playgroud)

在Mockito中是否有任何方法来存根class2.method的结果?我正在尝试改进class1的代码覆盖率,所以我需要调用它真正的生产方法.

我在其间谍方法中查看了Mockito API,但这会覆盖整个方法而不是我想要的部分.

java junit unit-testing mocking mockito

11
推荐指数
1
解决办法
4万
查看次数

x86汇编代码中的指针引用

我正在读我的教科书,它有交换功能的代码:

在C:

int exchange(int *xp, int y) {
 int x = *xp;
 *xp = y;
 return x; 
}
Run Code Online (Sandbox Code Playgroud)

在x86带注释的程序集中:

// xp is at %ebp + 8, y at %ebp + 12
movl 8(%ebp), %edx      // get xp
movl (%edx), %eax       // get x at xp
movl 12(%ebp), %ecx     // get y
movl %ecx, (%edx)       // store y at xp
Run Code Online (Sandbox Code Playgroud)

因此,根据我的理解,如果int*xp指向地址A处的int I,则汇编代码的第一行将A存储在%edx处.然后在第二行中取消引用并存储在%eax中.

如果这是真的,我想知道为什么第1行的"8(%ebp)"没有取消引用指针,将int存储在%edx而不是地址A中?这不是括号在汇编中做的吗?

或者这是否意味着当指针被推入堆栈时,指针的地址被推上而不是它所持有的值,因此8(%ebp)技术上持有&xp?

只是想澄清我的理解是否正确.

c x86 assembly pointers att

7
推荐指数
1
解决办法
1万
查看次数

Node.js 如何知道回调的第一个参数是否是错误处理程序?

我对 Node.js 还很陌生,我正在尝试理解它的错误优先回调风格。

我很好奇函数如何知道第一个参数是否用于处理错误以及何时用于处理请求以及什么不是,因为这些变量名称是任意的。

以下是一些首先包含和不包含 err 的代码示例

fs.readFile('/foo.txt', function(err, data) {
  if (err) {
      console.log('Ahh! An Error!');
      return;
  }
  console.log(data);
});
Run Code Online (Sandbox Code Playgroud)

http.createServer(function(req, res) { ... });
Run Code Online (Sandbox Code Playgroud)

我相信 Express 框架通过计算参数数量来实现这一点,将 err 作为可选的第一个参数,但在这些情况下,只有两个参数。

javascript callback node.js express

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

OCaml函数传递一个较少的参数

我正在寻找家庭作业的解决方案,代码实现了一个OCaml函数,该函数接受两个参数,但是当它被调用时,它只传递一个参数.

let rec func2 r x = match r with
  | [] -> []
  | (nt,rhs)::t -> if nt = x then rhs::(func2 t x) else func2 t x;;

let func1 r = fun x -> func2 r x;;
Run Code Online (Sandbox Code Playgroud)

我会通过调用(func1 awksub_rules)来调用类似下面的语法规则的func1

let awksub_rules = [
  Expr, [T"("; N Expr; T")"];
  Expr, [N Num];
  Num, [T"0"];
  Num, [T"1"]
]
Run Code Online (Sandbox Code Playgroud)

Expr和Num只是已经定义的非终结类型,T符号表示终端类型.

我很困惑,因为func1只接受awksub_rules作为参数,但函数声明有两个函数.

预期的输出是

function 
  | Expr -> [[T"("; N Expr; T")"]; [N Num]]
  | Num -> [[T"0"]; [T"1"]]
Run Code Online (Sandbox Code Playgroud)

我可以看到func1正确返回一个函数,并且func2处理检查左侧(Expr或Num)是否相同,以便它可以连接到列表.但是我不知道传递给x的是什么.

grammar f# ocaml ml pattern-matching

4
推荐指数
1
解决办法
320
查看次数

在 C 中将 const void * 转换为 const char *

所以我有一个 C 函数,如下所示:

int cmp (const void *a, const void* b)
 return rot13cmp( (const char*)a, (const char*)b );
}
Run Code Online (Sandbox Code Playgroud)

rot13cmp 是另一个函数,它采用两个 const char * 类型的参数。

我将此函数传递给 C qsort函数的比较参数,但它似乎不起作用。

但是,如果我通过执行以下操作来转换 const void * 变量

return rot13cmp ( *(const char **)a, *(const char **)b ); 
Run Code Online (Sandbox Code Playgroud)

然后该功能开始工作。我查了一下这个,但每个消息来源都说第一种铸造方法应该有效,所以我想知道为什么只有第二种方法对我有用?

编辑:这是我的相关代码,

int cmp (const void *a, const void *b) {
 return rot13cmp( (const char *)a, (const char *)b );
}

int rot13cmp (const char *a, const char *b) {
 while (*a == *b && *a …
Run Code Online (Sandbox Code Playgroud)

c casting qsort

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