小编use*_*653的帖子

是否可以在每次PHPUnit测试失败后运行一个函数?

我正在使用PHPUnit和Selenium 2在我的网络应用程序上进行一些集成测试.我希望每次测试失败时都会保存截图.这是我到目前为止:

<?php
include 'c:/wamp/www/testarea/selenium/phpunit-selenium/vendor/autoload.php';

class WebTest extends PHPUnit_Extensions_Selenium2TestCase
{       
    protected function setUp()
    {
        $this->setBrowser('firefox');
        $this->setBrowserUrl('http://www.google.com/');
    }

    public function testTitle()
    {
        $this->url('http://www.google.com/');
        file_put_contents("c:/wamp/www/testarea/selenium/phpunit-selenium/screenshots/screenshot1.png",$this->currentScreenshot());
        $this->assertEquals('NOT GOOGLE', $this->title());
    }

}
Run Code Online (Sandbox Code Playgroud)

这工作正常,并在运行测试时保存屏幕截图 - 但是,我希望能够在测试失败后才能保存屏幕截图,这应该在每次测试时都会发生.有没有办法告诉PHPUnit在每次测试失败后自动运行一个函数?

谢谢

php phpunit selenium-webdriver

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

自动响应批处理文件中的runas

我正在尝试获取批处理文件以自动将密码输入"runas"程序,但我无法让它工作.到目前为止,这是我的批处理文件:

echo password | runas /user:testuser c:/path/to/my/program.exe
Run Code Online (Sandbox Code Playgroud)

但是,我收到错误消息"未知用户名或密码错误".我也尝试过:

runas /user:testuser c:/path/to/my/program.exe < c:/path/to/file/containing/password.txt
Run Code Online (Sandbox Code Playgroud)

这回来时出现了同样的错误.有谁知道这样做的方法?我最终要做的是让批处理文件从配置文件中读取用户名和密码,然后以该用户身份启动"program.exe".

windows batch-file runas

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

这是抽象工厂模式的合法用途吗?

这是我在我的程序中尝试实现的内容:

  • 该程序应该打开一个zip文件,其中包含许多数据文件
  • zip文件的数据文件格式可能不同(例如csv,制表符分隔,甚至可能是某种需要解码的二进制文件)
  • 但是,在zip文件中,所有数据文件都是相同类型的

我一直在阅读Gamma等人的"设计模式",并一直在寻找抽象工厂模式来试图解决这个问题.

理想情况下,我希望Zip文件有一个类,它可以读取其中的任何类型的数据文件.我想我会有两个类 - FileTypeA和FileTypeB,它们可以处理不同格式的数据(尽管将来会有更多).我想告诉我的ZipFile类在读取数据时使用哪种类型的文件.

到目前为止,这是我提出的:

<?php

/**
 * An abstract factory used for creating data files of any type
 */
abstract class DataFileFactory{
    abstract function createFile($id);
}

/**
 * A factory for creating and setting up a data file of type 'A'
 */
class FileAFactory extends DataFileFactory{
    public function createFile($id){
        $file = new FileA();
        $file->setSampleId($id);
        return $file;
    }
}

/**
 * A factory for creating and setting up a data file of type 'B'
 */
class …
Run Code Online (Sandbox Code Playgroud)

php design-patterns

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

总结Oracle中的空行

我有这样的数据集:

+---------------+-------+
| SAMPLE_NUMBER | SCORE |
+---------------+-------+
|             1 | 100   |
|             2 | 97    |
|             3 | 124   |
|             4 | 762   |
|             5 | 999   |
|             6 | 1200  |
|             7 | NULL  |
|             8 | NULL  |
|             9 | NULL  |
|            10 | NULL  |
+---------------+-------+
Run Code Online (Sandbox Code Playgroud)

我希望能够汇总NULL行而不是全部显示它们.理想情况下,我希望上面看起来像这样:

+---------------+-------+
| SAMPLE_NUMBER | SCORE |
+---------------+-------+
| 1             | 100   |
| 2             | 97    |
| 3             | …
Run Code Online (Sandbox Code Playgroud)

sql oracle oracle11g

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

阻止用户在mercurial中推送稳定分支

我刚开始使用Mercurial作为源控制系统.我正在考虑使用类似于此处概述的工作流程:http://stevelosh.com/blog/2010/05/mercurial-workflows-stable-default/.基本上,有两个分支,一个是"稳定",一个是"发展".所有开发都将在"开发"分支上完成,并且只有在经过测试并准备发布时才会合并到"稳定"分支中.

o | v2.0
|\|
| o added new feature
o | V1.0
|\|
| o added new feature
| |
| o fixed bug
o |
Run Code Online (Sandbox Code Playgroud)

我想阻止开发人员意外地将更改推送到稳定分支.我怎样才能做到这一点?我知道有一些方法可以勾勒出某些Mercurial事件,但如果它改变了稳定分支,哪一个可以拒绝推动?如何检测钩子内某些分支的变化?

顺便说一句,我正在运行Windows 7.

UPDATE

感谢criswel的回答 - 它指出了我正确的方向.原来ACL扩展(mercurial附带)解决了这个问题.我在主repo的'.hg'文件夹中编辑了'hgrc'文件,如下所示:

[extensions]
acl = 

[hooks]
pretxnchangegroup.acl = python:hgext.acl.hook

[acl]
sources = push

[acl.deny.branches]
stable = *
Run Code Online (Sandbox Code Playgroud)

这会阻止任何人对稳定分支进行更改并将其推送到主仓库.

mercurial mercurial-hook

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

Oracle 11g:仅当行在组中的第一个或最后一个时才返回值

我正在尝试从Oracle查询创建报告.数据是这样的:

GROUP_ID | COUNT_1 | COUNT_2
    1    |   100   |   123
    1    |   101   |   123
    1    |   283   |   342
    1    |   134   |   123
    2    |   241   |   432
    2    |   321   |   920
    2    |   432   |   121
    2    |   135   |   342
Run Code Online (Sandbox Code Playgroud)

我想要做的只是当它在组中的第一个时返回GROUP_ID,并且当它在组中的最后一个时返回一些其他值,例如

GROUP_ID | COUNT_1 | COUNT_2
    1    |   100   |   123
         |   101   |   123
         |   283   |   342
   last  |   134   |   123
    2    |   241   |   432
         |   321   |   920
         | …
Run Code Online (Sandbox Code Playgroud)

sql oracle oracle11g

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

如何找出Oracle死锁的原因

在测试多个用户的应用程序时,我遇到了ORA-00060死锁错误.我不知道如何确定这个错误的原因,所以如果有人能帮助我,我将不胜感激.

我查看了为此事件生成的跟踪文件,它显示了导致此问题的查询:

UPDATE TABLE_A SET CK=CK+1 WHERE A_ID=(
    SELECT A_ID FROM TABLE_B WHERE SOME_COLUMN=:SOMECOLUMN
)
Run Code Online (Sandbox Code Playgroud)

它还产生了这个:

[Transaction Deadlock]

The following deadlock is not an ORACLE error. It is a
deadlock due to user error in the design of an application
or from issuing incorrect ad-hoc SQL. The following
information may aid in determining the deadlock:

Deadlock graph:
                       ---------Blocker(s)--------  ---------Waiter(s)---------
Resource Name          process session holds waits  process session holds waits
TM-0002a675-00000000        51     200    SX   SSX       52      22    SX   SSX
TM-0002a675-00000000        52 …
Run Code Online (Sandbox Code Playgroud)

sql oracle database-deadlocks

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

如何在PHPUnit测试中使用输出缓冲?

我正在使用PHPUnit来测试下载文件的功能。我想测试是否下载了正确的文件,所以我的想法是检查函数的输出。我正在尝试使用输出缓冲:

ob_start();
$viewer->downloadById($fileId);
$output = ob_get_flush();
$this->assertEquals($expectedFileContents,$output);
Run Code Online (Sandbox Code Playgroud)

测试应该通过/失败,这很好。我的问题是输出缓冲区的内容也被打印到控制台。我该如何隐藏呢?

php testing phpunit unit-testing

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

Oracle 12c客户端安装程序错误

我正在尝试在完全干净的Windows Server 2012副本上安装Oracle客户端12.1.0.2.0(32位),我遇到了问题.

安装程序运行正常,直到它到达最后一部分 - 网络配置助手.将显示一条错误消息,并显示"[INS-20802] Oracle Net Configuration Assistant失败.".这是生成的日志文件的相关部分(如果请求,我可以发布整个事情,但这里发生了实际错误):

INFO: Read: UnsatisfiedLinkError exception loading native library: oranjni12
INFO: Stderr Read: java.lang.UnsatisfiedLinkError: oracle.net.common.NetGetEnv.jniGetOracleHome()Ljava/lang/String;
WARNING: Skipping line: UnsatisfiedLinkError exception loading native library: oranjni12
INFO: Read: java.lang.UnsatisfiedLinkError: C:\app\ORACLE_USER\product\12.1.0\client_1\BIN\oranjni12.dll: Can't find dependent libraries
INFO: Stderr Read:  at oracle.net.common.NetGetEnv.jniGetOracleHome(Native Method)
INFO: Stderr Read:  at oracle.net.common.NetGetEnv.getOracleHome(Unknown Source)
INFO: Stderr Read:  at oracle.net.ca.NetCALogger.getOracleHome(NetCALogger.java:230)
INFO: Stderr Read:  at oracle.net.ca.NetCALogger.initOracleParameters(NetCALogger.java:215)
INFO: Stderr Read:  at oracle.net.ca.NetCALogger.initLogger(NetCALogger.java:130)
INFO: Stderr Read:  at oracle.net.ca.NetCA.main(NetCA.java:433)
WARNING: Skipping line: java.lang.UnsatisfiedLinkError: C:\app\ORACLE_USER\product\12.1.0\client_1\BIN\oranjni12.dll: Can't find dependent …
Run Code Online (Sandbox Code Playgroud)

oracle oracle12c

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

是否可以使用oracle数据泵导出数据库中的所有模式?

我正在使用Oracle 11g 11.2.0.1.0,我正在尝试使用数据泵来导出数据库中的所有模式.我知道您可以使用SCHEMAS参数指定多个模式,但我需要能够导出所有模式而无需显式命名它们,因为在任何给定时间我都不知道具有哪些模式(它是一个开发数据库和开发人员可以随时添加模式.有没有办法用数据泵做到这一点?还是有其他工具可以做到这一点?

谢谢!

database oracle datapump

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

有没有办法阻止PHP评估两个字符串"1"和"1.0"是否相同?

在PHP中,有没有办法阻止它评估两个字符串"1"和"1.0"相同?下面的代码说明了我在说什么:

<?php
    $str1 = "1";
    $str2 = "1.0";

    if($str1==$str2){
      echo "equal";
    }else{
      echo "not equal";
    }
?>
Run Code Online (Sandbox Code Playgroud)

对我来说问题是,我正在尝试检查用户在将其提交回服务器时是否更改了值.目前,如果用户将值从"1"更改为"1.0",则应该注意到他们已经更改了记录并允许他们将其保存到数据库这一事实 - 但是因为PHP在比较时将它们作为数字进行评估他们认为用户没有做任何改变,也不允许他们保存.

有没有办法解决?

php

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

ExtJS 4.2 - 有一个远程加载商店,它可以附加记录而不是替换它们吗?

我有一个商店,我想将一些初始值硬编码.然后,当它从服务器加载时,我希望它将结果附加到初始值,而不是替换它们.这可能吗?

这就是我现在所拥有的:

var myStore = Ext.create("Ext.data.Store",{
  autoLoad: true,
  fields:[
    {name:"id", type:"int"},
    {name:"username", type:"string"}
  ],
  data: [
    {id: 1, name: "User1"},
    {id: 2, name: "User2"}
  ],
  proxy: {
    type: 'ajax',
    url: 'users.php?method=getUsers',
    reader: {
      type: 'json',
      root: 'results'
    }
  }
});
Run Code Online (Sandbox Code Playgroud)

我希望从PHP脚本返回的数据被添加到商店中已经存在的"User1"和"User2"中.

javascript extjs extjs4 extjs4.2

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

如何在PHPUnit中存根更复杂的方法

我正在尝试减少程序的依赖性,使其更容易测试.我这样做的一个实例是我__construct()的一个类的方法.之前,它曾经接受一个文件名,然后该__construct()方法将使用该文件名将file_get_contents()内容保存到属性中:

public function __construct($name){
  $this->name = $name;
  $this->contents = file_get_contents($name);
}
Run Code Online (Sandbox Code Playgroud)

为了减少对文件系统的依赖,我将其替换为:

public function __construct(SplFileObject $file){
  $this->name = $file->getFilename();
  $this->contents = '';
  while(!$file->eof()){
    $this->contents .= $file->fgets();
  }
}
Run Code Online (Sandbox Code Playgroud)

我相信这更容易测试,因为我可以模拟一个SplFileObject(可以设置为包含我想要的任何内容)并传入它.到目前为止我看到的例子包括做这样的事情:

$stub = $this->getMock('SplFileObject');
$stub->expects($this->any())
     ->method('fgets')
     ->will($this->returnValue('contents of file'));
Run Code Online (Sandbox Code Playgroud)

然而,意志的模拟fgets方法SplFileObject需要更复杂 - 它需要遍历内容的每一行,并在它到达结束时停止.

暂时我有一个有效的解决方案 - 我刚刚创建了一个全新的类MockSplFileObject来覆盖这些方法:

class MockSplFileObject extends SplFileObject{
    public $maxLines;
    public $filename;
    public $contents;
    public $currentLine = 1;

  public function __construct($filename, $contents){
    $this->filename = $filename;
    $this->contents = …
Run Code Online (Sandbox Code Playgroud)

php testing phpunit unit-testing

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