小编Jer*_*auw的帖子

中止并恢复Symfony控制台命令

我有一个Symfony Console命令,它迭代一个可能很大的项目集合,并为每个项目执行任务.由于集合可能很大,因此命令可能需要很长时间才能运行(小时).命令完成后,它会显示一些统计信息.

我想以一种很好的方式中止命令.现在,如果我中止它(即在CLI中使用ctrl + c),则没有统计摘要,也无法输出恢复命令所需的参数.另一个问题是命令可能在处理项目的过程中被终止 - 如果它只能在处理项之间终止,那就更好了.

那么有没有办法告诉命令"尽快中止",或者将ctrl + c命令解释为这样?

我尝试使用该ConsoleEvents::TERMINATE事件,虽然这个处理程序只在命令完成时被触发,而不是当我按ctrl + c时.而且我无法找到有关制作此类可恢复命令的更多信息.

php console symfony

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

循环遍历Lua中的数组值

我有一个变量如下

local armies = {
    [1] = "ARMY_1",
    [2] = "ARMY_3",
    [3] = "ARMY_6",
    [4] = "ARMY_7",
}
Run Code Online (Sandbox Code Playgroud)

现在我想为每个值做一个动作.循环这些值的最佳方法是什么?我在互联网上找到的典型事情是这样的:

for i, armyName in pairs(armies) do
    doStuffWithArmyName(armyName)
end
Run Code Online (Sandbox Code Playgroud)

我不喜欢它,因为它导致一个未使用的变量i.以下方法避免了这种情况,并且是我目前正在使用的方法:

for i in pairs(armies) do
    doStuffWithArmyName(armies[i])
end
Run Code Online (Sandbox Code Playgroud)

然而,这仍然不像我想的那样可读和简单,因为这是迭代密钥然后使用密钥获取值(相当必要).我对这两种方法的另一个好处pairs就是需要.在这里循环的值是我可以控制的值,我希望它可以尽可能容易地循环.

如果我只关心这些值,有没有更好的方法来做这样的循环?有没有办法解决我列出的问题?

我正在使用Lua 5.0(对语言来说很新)

lua loops readability

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

PHP可迭代到数组或Traversable

我很高兴PHP 7.1引入了iterable伪类型.

现在虽然这只是循环遍历这种类型的参数很好,但是当你需要将它传递给只接受一个array或只是一个的PHP函数时,我不清楚该怎么做Traversable.例如,如果你想做一个array_diff,而你的iterable是a Traversable,你会得到一个array.相反,如果你调用一个带有Iterator的函数,如果iterable是一个,你会得到一个错误array.

有没有iterable_to_array(NOT :) iterator_to_arrayiterable_to_traversable

我正在寻找一种解决方案,避免我的函数中的条件只是为了处理这种差异,而这并不取决于我定义自己的全局函数.

使用PHP 7.1

php arrays iterator php-7 php-7.1

10
推荐指数
7
解决办法
3922
查看次数

自动镜像GitHub存储库

我怀疑之前已经问过这个问题,尽管我所能找到的只是相似而且截然不同的问题,或者说只有解决方案对我不起作用的问题.

在GitHub上有一个我无法控制并想要镜像的存储库.使用镜像我的意思是有一个自动更新的克隆.我希望这个镜像也在GitHub上.优选地,任何解决方案都不会涉及我方的许多配置或设置工作.但是,如果需要,我可以在某个VPS上使用cron运行脚本.

我可以纯粹通过GitHub创建这样的镜像吗?如果没有,是否准备好使用脚本来执行此操作?

git github mirror

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

Python unittest数据提供者

我试图在python中创建一个具有数据提供程序的单元测试.由于unittest库不支持这个诞生,我使用的是unittest_data_provider包.我收到一个错误,我不知道它来自哪里(我是python的新手).

我的代码

import unittest
from wikibase.dataModel.item_id import ItemId
from unittest_data_provider import data_provider


class TestItemId(unittest.TestCase):
    itemIds = lambda: (
        ( 'q42' ),
        ( 'Q42' ),
        ( 'Q1' ),
        ( 'Q1000' ),
        ( 'Q31337' ),
    )

    @data_provider(itemIds)
    def test_constructor(self, itemString):
        itemId = ItemId(itemString)
        self.assertEqual(itemId.getSerialization(), itemString)
Run Code Online (Sandbox Code Playgroud)

我得到的错误:

文件"/usr/local/lib/python3.3/dist-packages/unittest_data_provider/ INIT py"为7行,在REPL FN(个体,*I)类型错误:test_constructor()采用2的位置参数,但被给予4

这是使用python 3.3.

python unit-testing dataprovider python-3.x python-3.3

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

PHPUnit模拟抽象类的所有方法

我有一个直接派生自PHPUnit_Framework_TestCase的PHPUnit测试用例.在这个类的测试中,我需要获得一些服务对象的模拟.此服务对象是由抽象基类定义的类型.该基类包含具体和抽象方法.我想得到一个完整的模拟事物(即所有方法被嘲笑).我的问题是如何做到这一点.

- > getMock给我一个错误,因为抽象方法没有被模拟,只有具体的

- > getMockForAbstractClass模拟抽象方法,但不是具体方法

我该如何嘲笑他们?

(我正在使用PHPUnit 3.7.13)

php testing phpunit unit-testing mocking

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

循环多个RecursiveDirectoryIterator

我目前有以下PHP:

$directoryIterator = new RecursiveDirectoryIterator( __DIR__ . '/tests/phpunit/' );

/**
 * @var SplFileInfo $fileInfo
 */
foreach ( new RecursiveIteratorIterator( $directoryIterator ) as $fileInfo ) {
    if ( substr( $fileInfo->getFilename(), -8 ) === 'Test.php' ) {
        $files[] = $fileInfo->getPathname();
    }
}
Run Code Online (Sandbox Code Playgroud)

这将创建一个数组,其中包含以/ tests/phpunit中以Test.php结尾的文件的路径.工作得很好,很好.但是现在我还想在/ tests/integration中注册东西.(/ tests中有更多东西,所以我不能简单地浏览整个目录.)我可以复制代码,但那是蹩脚的.所以现在我想弄清楚如何循环两个RecursiveDirectoryIterator实例.这有可能是一种理智的方式吗?

php iterator

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

unittest.TestCase.assertEqual的参数顺序

难道assertEqual(actual, expected)还是assertEqual(expected, actual)

一方面我看到很多代码使用assertEqual(actual, expected).这包括在单元测试文档的例子在Django文档的例子.

但是,这个测试assertEqual('foo', 'bar')给了我输出

- foo
+ bar
Run Code Online (Sandbox Code Playgroud)

这恰好与PHPUnit测试相同 assertEquals( 'foo', 'bar' );

-'foo'
+'bar'
Run Code Online (Sandbox Code Playgroud)

PHPUnit $expected作为第一个参数,后跟$actual.这种差异也是我所期望的expected, actual.

所有这些Python代码我看到做错了吗?

我检查了unittest方法的定义,尽管它有非常有用的first, second参数名称.

python django python-unittest

6
推荐指数
2
解决办法
1922
查看次数

如何全局禁用git钩子

出于安全原因,我希望默认情况下禁用 git hooks。

更具体地说,当我在我的 (Kubuntu) 操作系统帐户上的任何 git 存储库中运行 git 命令时,不应执行任何 git 钩子,除非以某种方式指定。

在 Vagrant 或 Docker 中运行我的所有代码时,我想避免的攻击是虚拟机中的恶意代码写入 git hooks 目录,从而将自身带到主机上的攻击。默认情况下禁用 git hooks 是一种防线。

我正在寻找一种不需要每个存储库工作和状态的解决方案。在我的搜索中,我遇到了这个脚本,它打破了这两个要求。

理想情况下,有一个简单的解决方案,例如将其放入.bash_aliases

alias git='/usr/bin/git --no-hooks'
Run Code Online (Sandbox Code Playgroud)

git security githooks

6
推荐指数
2
解决办法
2744
查看次数

使用 Composer 为项目运行所有 PHPUnit 测试

我有一组 PHP 项目,其中一些依赖于其他项目。都有 PHPUnit 测试。所有这些都可以通过 Composer 安装,并使用 composer.json 文件指定它们的依赖项。每个项目的根目录下都有一个 phpunit.xml.dist 文件,它指向一个 bootsrap 文件。

现在我有这个项目 Foo,它有许多直接依赖项和几个间接依赖项。对于 Foo 的 CI,我想运行它的所有测试,以及它的所有依赖项。

这是否可以通过 Composer 完成?如果没有,是否有一些标准的干净方法来做到这一点?

php testing continuous-integration phpunit composer-php

5
推荐指数
2
解决办法
4369
查看次数