小编Nik*_*ose的帖子

模拟抛出错误phpunit的方法

PHPUnit让我使用以下任一方法创建方法存根以抛出异常:

  • [->will($this->throwException(..)][1]
  • ->willThrowException(..

我需要测试方法存根抛出PHP错误的一些情况.

PHPUnit是否支持这样的东西?这里有变通方法吗?

php phpunit unit-testing

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

搜索类 PhpStorm 中的方法

我曾经在 Eclipse 中工作,有一个非常简洁的热键 ( Ctrl+ O),用于搜索类中的方法。

我的意思是,如果您在编辑器中查看类的源代码,并且点击Ctrl+ O,则会弹出一个列出所有方法的窗口。如果您开始输入,该列表将被过滤。如果我输入get,我可以看到一个 getter 列表..

这非常有帮助。我转向了 PHP 和 PhpStorm,在这里我很想念这个功能,或者我不知道 PhpStorm 是否有这个功能。

你们对 PhpStorm 中的这样一个关键组合有任何想法吗?

keyboard-shortcuts phpstorm

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

无法序列化已经序列化的类?

请参阅下面的剪辑

    USPresident usPresident = new USPresident(56);
    try (ObjectOutputStream oos = new ObjectOutputStream(new
    FileOutputStream("/home/nikhil/dev/USPresident.data"))){
    oos.writeObject(usPresident);
    usPresident.setTerm(57);
    oos.writeObject(usPresident);
    System.out.println("Serialized");
    }
Run Code Online (Sandbox Code Playgroud)

创建了一个总统实例,任期为56.将其序列化.将术语重置为57再次序列化

但是,当我反序列化对象时,它的术语仍为56(而不是57!)

我在书上看到了这个解释,

是的,即使您使用其setter将术语更改为57并再次序列化,它也将打印56.这是由于serialVersionUID引起的,在序列化时由JVM检查.如果某个类已经序列化并且您尝试再次对其进行序列化,则JVM将不会对其进行序列化.

但是,据我所知,serialVersionUID用于在反序列化期间检查Class对象是否与序列化对象匹配.此外,serialVersionUID用作Object签名的标识符,而不是状态.

不明白这里发生了什么.有人可以解释这种行为吗?

看一下ObjectOutputStream的实现,这就是writeObjet的实现方式

public final void writeObject(Object obj) throws IOException {
    if (enableOverride) {
        writeObjectOverride(obj);
        return;
    }
    try {
        writeObject0(obj, false);
    } catch (IOException ex) {
        if (depth == 0) {
            writeFatalException(ex);
        }
        throw ex;
    }
}
Run Code Online (Sandbox Code Playgroud)

请参阅boolean enableOverride.写'修改'对象必须如此.但是,只有在使用ObjectOutputStream的子类时,才能将其设置为true.请参阅下面的受保护构造函数,

protected ObjectOutputStream() throws IOException, SecurityException {
    SecurityManager sm = System.getSecurityManager();
    if (sm != null) {
        sm.checkPermission(SUBCLASS_IMPLEMENTATION_PERMISSION);
    }
    bout …
Run Code Online (Sandbox Code Playgroud)

java serialization

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

在PHP中将字符串数组转换为整数数组

我跟着这个这个问题中的线索.

我试图将输入的数字流转换为整数数组.代码应该是自我解释的.

$handle = fopen("php://stdin","r");

print("Enter space separated numbers to be made to an array\n");

$numStream = fgets($handle);

print("Creating array from : {$numStream}\n");

//Using explode to create arrays
//now we have an array of Strings
$numArray = explode(" ", $numStream);

var_dump($numArray);

print(getType($numArray[0]));
print("\n");
array_walk($numArray, 'intval');
print(getType($numArray[1]));
print("\n");
var_dump($numArray);
print_r($numArray);
Run Code Online (Sandbox Code Playgroud)

我试图转换String数组,

array_walk($numArray, 'intval')
Run Code Online (Sandbox Code Playgroud)

最后两个打印块在转换之前和之后打印数组元素的类型.

两种情况下的输出都是字符串

string
string
Run Code Online (Sandbox Code Playgroud)

我想知道这里发生了什么?可能..

  1. 转换是错误的
  2. 如何检查类型是错误的

或者两者都可能.

添加完整的输入和输出,

$ php arrays/arrayStringToInteger.php 
Enter space separated numbers to be made to an array
1 1 …
Run Code Online (Sandbox Code Playgroud)

php arrays

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

在Travis Build中运行PHPUnit时出现问题

我在Travis运行PHPUnit时遇到了一些麻烦.

我的travis配置很简单

language: php
php:
  - 7.0
  - 7.1
script: phpunit
Run Code Online (Sandbox Code Playgroud)

我的phpunit.xml如下,

<?xml version="1.0" encoding="UTF-8"?>
<phpunit bootstrap="vendor/autoload.php">
    <testsuites>
        <testsuite name="Basic Test Suite">
            <directory suffix=".php">./tests/</directory>
        </testsuite>
    </testsuites>
</phpunit>
Run Code Online (Sandbox Code Playgroud)

还有我的composer.json

{
    "name": "nikhilkuria/nikeandphp",
    "description": "A PHP library used to work with Nike+ API",
    "type": "library",
    "authors": [
        {
            "name": "nikhilkuria",
            "email": "nikhilkuria@gmail.com"
        }
    ],
    "require": {
        "monolog/monolog": "^1.22"
    },
    "require-dev": {
      "phpunit/phpunit": "5.7.*"
    },
    "autoload": {
        "psr-4": {"NikeAndPhp\\": "src/NikeAndPhp"}
}
}
Run Code Online (Sandbox Code Playgroud)

问题是特拉维斯无法找到我的autoload.php.这是我在travis日志中看到的,

无法打开文件"/home/travis/build/nikhilkuria/nikeandphp/vendor/autoload.php".

整个日志都在这里.

这里似乎缺少什么?

php phpunit travis-ci composer-php

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