小编Dmi*_*sky的帖子

单元测试依赖方法

我想对我所创建的类进行单元测试,但是这种方法需要先调用另一种方法.例:

// This would work
MyClass myClass1 = new MyClass(mockDevice);
myClass1.Run(myDatastructure);
myClass1.Stop();

// This would throw an InvalidOperationException
MyClass myClass2 = new MyClass(mockDevice);
myClass2.Stop();
Run Code Online (Sandbox Code Playgroud)

Run正在硬件设备上启动操作Stop,当然是尝试停止该操作(发送reset-command并启动timeout-timer).

无论如何,我想测试各种调用的后置条件Stop,但我不想打电话Run,因为我正在测试Stop- 不是Run!我想要这样的东西:

MyClass myClass = new MyClass(mockDevice);
myClass.Stop();
Assert.IsTrue(mockDevice.ResetCalled);
Run Code Online (Sandbox Code Playgroud)

到目前为止,我只看到一个可能的解决方案,那就是创建一个TestableMyClass继承自的方法MyClass,这样就可以MyClass在调用之前设置实例的正确内部状态Stop.这个解决方案的问题是我必须改变我的MyClass实现以保护成员而不是私有成员,我喜欢为了测试它而不得不改变实现的想法!

我应该使用这个解决方案吗,我的设计中是否有错误,或者有更聪明的方法吗?

c# unit-testing

10
推荐指数
2
解决办法
1199
查看次数

将字符串文字作为定义为指针的函数参数传递

我正在阅读Kernighan和Richie的C编程语言中有关数组和指针的章节.

他们给出了一个例子:

/* strlen:  return length of string s */
int strlen(char *s)
{
    int n;

    for (n = 0; *s != '\0'; s++)
        n++;
    return n;
}
Run Code Online (Sandbox Code Playgroud)

然后说:

"既然s是一个指针,增加它是完全合法的; s++对调用的函数中的字符串没有影响strlen,但只增加了strlen指针的私有副本.这意味着像这样的电话

strlen("hello, world");  /* string constant */
strlen(array);           /* char array[100]; */
strlen(ptr);             /* char *ptr; */
Run Code Online (Sandbox Code Playgroud)

所有的工作."

除了第一个调用示例之外,我觉得我理解所有这些:为什么或如何将字符串文字"hello, world"视为char *s?这怎么指针?函数是否将此字符串文字指定为其局部变量的值,*s然后s用作数组名称/指针?

c pointers

10
推荐指数
2
解决办法
3万
查看次数

格式良好的HTML字符串上的jQuery()会导致语法错误,无法识别的表达式

我已经有了一个完整的HTML文档$.ajax(),我的.done()回调看起来像这样:

function (data, text_status, jq_xhr) {
  var $what_i_want = $(data).find('#what-i-want');
}
Run Code Online (Sandbox Code Playgroud)

where data是一个包含整个格式良好的HTML文档的字符串.此代码永远不会到达.find().

$(data),我得到:

`Uncaught Error: Syntax error, unrecognized expression: <!DOCTYPE html>`...
Run Code Online (Sandbox Code Playgroud)

事实:

  • 我正在使用jQuery 1.9.0
  • 根据W3C验证器,该文档是格式良好的HTML5.

我习惯于jQuery()将许多HTML字符串客观化,所以我很惊讶这不起作用.不可否认,我不记得曾经尝试过整个文件.鉴于错误,我猜,也许,我需要以某种方式逃避这个字符串.但我不确定如何.

顺便说一下,这有效:

var $what_i_want = $('#what-i-want', $.parseHTML(data))
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚为什么第一种方法失败了.

javascript jquery

10
推荐指数
2
解决办法
8371
查看次数

Elasticsearch - NoNodeAvailableException

尝试使用Java API for ES 2连接到Elasticsearch 2时出现以下错误.这是代码:

Settings settings = Settings.settingsBuilder().put("cluster.name", Receptor.clusterName).build();
TransportClient transportClient = TransportClient.builder().settings(settings).build();
Client c = null;
try {
     c = transportClient.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(Receptor.es_ip), 9300));
} catch (UnknownHostException e) {
     System.err.println(Util.getTimestampStr() + "UnknownHostException error.");
     e.printStackTrace();
}

CreateIndexRequestBuilder createIndexRequestBuilder = c.admin().indices().prepareCreate(indexName);
createIndexRequestBuilder.addMapping(documentName, json);
createIndexRequestBuilder.execute().actionGet();
Run Code Online (Sandbox Code Playgroud)

我能够在transportClient.connectedNodes()上获取我的ES节点,但是当我尝试添加新的映射时,我得到了NoNodeAvailableException异常.此代码适用于以前版本的Elasticsearch.什么是错的?

NoNodeAvailableException[None of the configured nodes are available:
[]]     at
org.elasticsearch.client.transport.TransportClientNodesService.ensureNodesAreAvailable(TransportClientNodesService.java:280)
    at
org.elasticsearch.client.transport.TransportClientNodesService.execute(TransportClientNodesService.java:197)
    at
org.elasticsearch.client.transport.support.TransportProxyClient.execute(TransportProxyClient.java:55)
    at
org.elasticsearch.client.transport.TransportClient.doExecute(TransportClient.java:272)
    at
org.elasticsearch.client.support.AbstractClient.execute(AbstractClient.java:347)
    at
org.elasticsearch.client.support.AbstractClient$IndicesAdmin.execute(AbstractClient.java:1177)
    at
org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:85)
    at
org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:59)
Run Code Online (Sandbox Code Playgroud)

java elasticsearch

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

当构造函数具有继承时,"构造函数不能应用于给定类型"

这是我的基类:

abstract public class CPU extends GameObject {
    protected float shiftX;
    protected float shiftY;

    public CPU(float x, float y) {
        super(x, y);
    }
Run Code Online (Sandbox Code Playgroud)

这是它的一个子类:

public class Beam extends CPU {
    public Beam(float x, float y, float shiftX, float shiftY, int beamMode) {
        try {
            image = ImageIO.read(new File("/home/tab/Pictures/Beam"+beamMode+".gif"));
        } catch (Exception e) {
            e.printStackTrace();
        }
        this.x = x;
        this.y = y;
        this.shiftX = shiftX;
        this.shiftY = shiftY;
    }
Run Code Online (Sandbox Code Playgroud)

New构造函数突出显示,它说:

Constructor CPU in class CPU cannot be applied to given types: …
Run Code Online (Sandbox Code Playgroud)

java constructor

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

我如何简单地从Kubernetes集群中的命令行运行容器(如docker run)?

我想从我的Kubernetes集群中的命令行运行一次性容器Pod.我正在寻找相当于:

docker run --rm -it centos /bin/bash
Run Code Online (Sandbox Code Playgroud)

kubectl同等的吗?

kubernetes

9
推荐指数
2
解决办法
4042
查看次数

自定义用户模型和南方

我正在尝试以最基本的方式使用自定义用户模型,扩展AbstractUserExtending Django的默认用户所述.但是,我不确定如何正确地与南方合作.我在进行初始模式迁移时遇到问题以下是发生的事情:

  • 我的扩展用户类Player在我的课程tournaments中启用了settings.INSTALLED_APPS.

  • 要执行初始化syncdb,tournaments必须启用该应用程序.否则我收到此错误:

    $ ./manage.py syncdb
    CommandError: One or more models did not validate:
    auth.user: Model has been swapped out for 'tournaments.Player' which has not been installed or is abstract.
    admin.logentry: 'user' has a relation with model tournaments.Player, which has either not been installed or is abstract.
    
    Run Code Online (Sandbox Code Playgroud)
  • 所以,我启用了tournaments具有我的Player(自定义用户)模型的应用程序.但是,在最初的迁移时:

    $ ./manage.py schemamigration tournaments --initial 
    ...
    $ ./manage.py migrate tournaments
    Running migrations for …
    Run Code Online (Sandbox Code Playgroud)

django django-south

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

为什么我会使用"service sshd reload"优先于"service sshd restart"?

从我在Linux上的测试来看,似乎就是这样

service sshd reload

  • 仅在sshd已经运行时才有效
  • sshd如果sshd_config文件有问题,则停止
  • 即使sshd_config文件有问题,也返回错误代码0

service sshd restart

  • 无论是否sshd已经运行,都可以工作
  • sshd如果sshd_config文件具有无效语法或其他问题,则停止
  • 如果sshd_config文件有问题,则返回非零错误代码

我知道他们正在执行不同的操作,但在我看来,我应该总是使用它service sshd restart.有什么理由service sshd reload在某些情况下更可取吗?

linux ssh operating-system sshd

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

在2.0版本的git add --update语法中,/(冒号,正斜杠)是什么意思?

几个月前我升级了Git,从那时起,我一直在尝试接受以下弃用通知git add --update:

警告:行为"git的添加--update(或-u)"从树的子目录没有路径参数将在Git的2.0改变,不应再使用.要为整个树添加内容,请运行:

git add --update:/(或git add -u:/)

要将命令限制到当前目录,请运行:

git add --update.(或git add -u.)

使用当前的Git版本,该命令仅限于当前目录.

警告本身非常有意义,它为我节省了一些重置.我已经习惯了输入.或者:/,但仍然发现后者非常奇怪,因为它与我遇到的任何其他命令行语法不同.这.是非常令牌:它只是意味着"当前目录",就像在find .,但:/......从未见过,除非在此上下文中.这是什么意思?

我一直认为它是一个表情符号,当然不是这样吗?

git

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

如何为条件类型赋值?

我正在尝试编写一个函数,使得第一个参数是boolean,并且取决于这个参数是true还是false,第二个参数是一个接受 astring或的函数string[]

这是我的尝试:

type P<B extends boolean> = B extends true ? string[] : string

function callback<B extends boolean>(b: B, t: (f: P<B>) => void) {
    const file = 'file'
    if (b) {
        t([file]) // <-- Error: Argument of type 'string' is not assignable to parameter of type 'P<B>'.
    } else {
        t(file)   // <-- Error: Argument of type 'string[]' is not assignable to parameter of type 'P<B>'.
    }
    
} …
Run Code Online (Sandbox Code Playgroud)

typescript

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