小编bel*_*hin的帖子

如何验证使用Mockito不调用特定方法?

如何验证是否在对象的依赖项上调用方法?

例如:

public interface Dependency {
    void someMethod();
}

public class Foo {
    public bar(final Dependency d) {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

通过Foo测试:

public class FooTest {
    @Test
    public void dependencyIsNotCalled() {
        final Foo foo = new Foo(...);
        final Dependency dependency = mock(Dependency.class);
        foo.bar(dependency);
        **// verify here that someMethod was not called??**
    }
}
Run Code Online (Sandbox Code Playgroud)

java tdd mockito

563
推荐指数
5
解决办法
30万
查看次数

在Linux中,如何在自己的进程组中启动进程?和更多

我想在自己的进程组中启动一个进程(或者,一旦启动就更改其组)并且:

  • 让组中的进程从终端响应Ctrl+C
  • 获取进程组的id,以便我可以通过kill命令终止组中的所有进程.

注意:我试过setsid prog [args]但是进程没有响应来自终端的Ctrl + C,也没有得到新的进程组ID.

我也试图通过Perl的改变进程组setpgrp($pid, $pid)POSIX::setpgid($pid, $pid),都无济于事.

编辑:更大的问题:

我有一个进程(单线程;让我们称之为"多产"进程P)同步启动许多子进程(一个接一个;当前一个子进程终止时它启动一个新进程).从终端,我希望能够杀死P它下面的进程树.要做到这一点,我可以简单地安排杀死组中的进程P.但是,默认行为是P在其父进程的组中.这意味着P如果我杀死了P组中的所有进程,那么父级将被杀死,除非我拥有P它的树并且它的树在他们自己的组中.

我的目的是杀死P它下面的树,但不是P父母.另外,我无法修改P代码本身.

linux process process-group

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

为什么AutoFixture.AutoMoq默认会进行递归模拟?

Moq默认不进行递归模拟.也就是说,对于对模拟没有期望的成员,Moq返回默认值.例如,给定:

public interface IFoo
{
    Bar Bar();
}
Run Code Online (Sandbox Code Playgroud)

public class Bar
{
}
Run Code Online (Sandbox Code Playgroud)

然后:

[TestMethod]
public void RecursiveMocksAreDisabledByDefaultInMoq()
{
    var foo = new Mock<IFoo>().Object;
    Assert.IsNull(foo.Bar());
}
Run Code Online (Sandbox Code Playgroud)

但是,在AutoFixture.AutoMoq中,默认情况下启用递归模拟,如:

[TestMethod]
public void RecursiveMocksAreEnabledByDefaultInAutoFixture()
{
    var fixture = new Fixture().Customize(new AutoMoqCustomization());
    var foo = fixture.Create<IFoo>();
    Assert.IsNotNull(foo.Bar());
}
Run Code Online (Sandbox Code Playgroud)

这是为什么?而且,如何在AutoFixture.AutoMoq中关闭自动递归模拟?

谢谢

Moq.3.1.416.3
AutoFixture.AutoMoq.3.16.5

c# moq mocking autofixture

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

如何取消可在多点取消的长时间运行操作?

我们有一个长期运行的操作,包括许多可以取消的点.如果我们要使用任务取消令牌方法,我们需要确保在每个所需位置检查取消.

这对我们来说似乎不是最理想的.我们在这里看到两个问题:

  1. 我们需要在每个有取消机会的地方进行取消令牌检查,我们觉得这些地方会使代码混乱,并且有可能错过代码中有其他取消机会的点数.
  2. 如果我们遵循指南以避免全局变量,我们需要将取消令牌作为参数传递给许多方法,我们认为这些方法是重复的并且使代码混乱.

我们应该使用全局取消令牌来处理2.?我们应该AppDomain用来处理1.和2.?

c# task-parallel-library

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

如何将导入语义实现到当前块范围?

文件use表明:

一些...伪模块将语义导入当前块范围(如严格或整数,不像普通模块,它将符号导入当前包(在文件末尾有效).

同样的, autodie

将函数替换为具有词法范围的成功或死亡的函数

如何使用普通模块将导入语义实现到当前块范围?

perl

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

如何将自己的文件加载到lein repl?

我正在读一本Clojure书.我将其中一个示例键入文件中.如何将其加载到lein repl

我没有lein项目,也不愿意创建项目.

clojure leiningen

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

如何在Perl Smart :: Comment上调用函数?

请考虑以下Perl代码:

use Smart::Comments;
print "${ \return_hello() }\n";
### ${ \return_hello() }
sub return_hello {return 'hello'}
Run Code Online (Sandbox Code Playgroud)

产生输出:

hello

### ${ \return_hello() }
Run Code Online (Sandbox Code Playgroud)

我怎么能return_hello在智能评论上调用该功能才能打印hello

perl

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

系统子程序和INT信号问题

我的Perl脚本中有一个INT信号处理程序.当Perl脚本处于系统调用中时发送INT时不会执行它.为什么?

考虑:

$ perl5.12/bin/perl -E "$(cat <<EOF

    \$SIG{INT} = sub {say q(trapped INT); exit};
    say q(sleeping ...);
    system q(sleep 10000); # INT at this point is not caught by Perl.

EOF)"
sleeping ...
Run Code Online (Sandbox Code Playgroud)

但是,如果我用睡眠呼叫替换系统调用,它按预期工作:

$ perl5.12/bin/perl -E "$(cat <<EOF

    \$SIG{INT} = sub {say q(trapped INT); exit};
    say q(sleeping ...);
    sleep 10000; # replaces the system call from above

EOF)"
sleeping ...
trapped INT
Run Code Online (Sandbox Code Playgroud)

Perl版本是:

$ perl5.12/bin/perl -v

This is perl 5, version 12, subversion 3 (v5.12.3) built for x86_64-linux-thread-multi
(with …
Run Code Online (Sandbox Code Playgroud)

perl

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

为什么记录不是功能?

与地图不同,记录不是功能.为什么?

;; maps are functions of the keys
({:a 1} :a) ;; 1
({:a 1}) ;; error
({:a 1} 1) ;; nil

;; records? no, records are not functions
(defrecord T [t])
((->T 1) :t) ;; error: T cannot be cast to clojure.lang.IFn
(:t (->T 1)) ;; 1
Run Code Online (Sandbox Code Playgroud)

clojure

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

在Moq中,给定对.Object的引用,是否可以操作原始模拟?

我希望有可能.Object通过Moq中的扩展方法操作模拟,但我没有找到任何适用的扩展方法.

例如:

interface IFoo
{
    void Bar();
}

/* ... */

var mock = Mock<IFoo>();
mock.Verify(x => x.Bar());

IFoo foo = mock.Object;
foo.Verify(x => x.Bar());   // this does not compile!
Run Code Online (Sandbox Code Playgroud)

反正我是否可以编写上面的代码(不编译的代码?)如果没有,为什么不呢?

c# moq mocking

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