我想知道有人应该如何使用Assert.Inconclusive().
我正在使用它,如果我的单元测试即将失败的原因不是测试的原因.
例如,我在类上有一个方法来计算int数组的总和.在同一个类中,还有一种计算元素平均值的方法.它通过调用sum并将其除以数组的长度来实现.
为Sum()编写单元测试很简单.但是,当我为Average()编写测试时,Sum()失败,那么Average()也可能失败.
平均值的失败并不清楚它失败的原因; 它失败的原因不是它应该测试的原因.这就是为什么我会检查Sum()是否返回正确的结果,否则我是Assert.Inconclusive().
这被认为是好习惯吗?什么是Assert.Inconclusive用于?或者我应该通过隔离框架来解决前面的例子?
就像这个问题一样,我也在使用Ryan Bates的nifty_scaffold.它具有使用Mocha的any_instance方法强制在隐藏在控制器后面的模型对象中的"无效"状态的理想方面.
与我链接的问题不同,我不使用RSpec,而是使用Test :: Unit.这意味着这两个以RSpec为中心的解决方案对我来说不起作用.
是否有一般(即:使用Test :: Unit)方法来删除any_instance存根?我相信它在我的测试中造成了一个错误,我想验证一下.
使用RhinoMocks,我试图Stub一个属性的getter值.该属性被定义为仅具有getter访问权限的接口的一部分.
但是我收到错误"无效的呼叫,已使用最后一次呼叫或未进行任何呼叫(确保您正在调用虚拟(C#)/可覆盖(VB)方法)." 我明白这可能意味着我存在的财产不是虚拟的; 但它是接口的一部分,我不确定这是否是我收到此错误的原因..
下面是代码框架.如果我取消注释"stubRepository.Stub(x => x.StoreDeviceID).PropertyBehavior();"的行,那么我得到一个新错误"属性必须是读/写".我搜索了SO并找到了这个页面.但建议的解决方案对我没有帮助.有什么想法吗?
public interface IStore {
string StoreDeviceID {get;}
//other methods
}
public static class Store {
private IStore Repository;
public void SetRepository(IStore rep){
Repository = rep;
}
public StoredeviceID {
get{
return Repository.StoreDeviceID;
}
}
//other methods
}
public class TestClass {
[Test]
public void TestDeviceID() {
var stubRepository =
MockRepository.GenerateStub<IStore>();
Store.SetRepository(stubRepository);
//stubRepository.Stub(x => x.StoreDeviceID).PropertyBehavior();
SetupResult.For(stubRepository.StoreDeviceID).Return("test");
Assert.AreSame(Store.StoreDeviceID, "test");
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个基于MHartl的RoR4教程的控制器
就像MHartl一样,我没有使用Devise,我推出了自己的身份验证系统
由于UsersController#Edit视图有一个调用current_user.admin?和控制器调用,因此RSpec出现问题@path_switch = path_switch
我不断得到RSpec错误:
1) User Pages Edit
Failure/Error: visit edit_user_path(user)
NoMethodError:
undefined method `admin?' for nil:NilClass
# ./app/controllers/users_controller.rb:106:in `path_switch'
# ./app/controllers/users_controller.rb:53:in `edit'
# ./spec/requests/user_pages_spec.rb:54:in `block (3 levels) in <top (required)>'
Run Code Online (Sandbox Code Playgroud)
UsersController:
class UsersController < ApplicationController
...
def edit
@user = User.find(params[:id])
@path_switch ||= path_switch #error
end
...
def path_switch
if current_user.admin? #error
users_path
else
root_path
end
end
end
Run Code Online (Sandbox Code Playgroud)
我发现这篇非常有用的文章让我希望我能走上正轨,但我无法让它发挥作用.
据我所知(更新):
user_pages_spec.rb:
require 'spec_helper'
require 'support/utilities' …Run Code Online (Sandbox Code Playgroud) 我正在尝试将React组件方法存根用于测试目的:
var Comp = React.createClass({
displayName: "Comp",
plop: function() {
console.log("plop");
},
render: function() {
this.plop();
return React.DOM.div(null, "foo");
}
});
var stub = sinon.stub(Comp.type.prototype, "plop");
React.addons.TestUtils.renderIntoDocument(Comp());
sinon.assert.called(stub); // throws
Run Code Online (Sandbox Code Playgroud)
这令人遗憾地继续将"plop"打印到控制台上......并且断言失败了.
注意:直接存在spec对象方法是有效的,但是你必须分别导出组件构造函数和规范,这样它们在测试中都可用...而且,你甚至需要在创建组件类之前存根规范; 不太方便:
var CompSpec = {
displayName: "Comp",
plop: function() {
console.log("plop");
},
render: function() {
this.plop();
return React.DOM.div("foo");
}
};
var stub = sinon.stub(CompSpec, "plop");
var Comp = React.createClass(CompSpec);
React.addons.TestUtils.renderIntoDocument(Comp());
// plop() is properly stubbed, so you can
sinon.assert.called(stub); // pass
Run Code Online (Sandbox Code Playgroud)
您能想到另一种轻松存根React组件方法的策略吗?
我知道用于类型检查和静态分析的内置 Python 库的存根文件随附mypy或 PyCharm 安装。我怎样才能获得存根文件matplotlib,numpy,scipy,pandas,等?
我正在尝试创建一个非常简单的PHP CLI应用程序,可以从命令行作为phar文件运行:
# php myProject.phar
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止所尝试的:
我的项目位于一个名为的目录中MyProject,它包含以下两个文件:
|-- createPhar.php
`-- bootstrap.php
Run Code Online (Sandbox Code Playgroud)
该bootstrap.php文件包含:
<?php
print phpversion() . PHP_EOL;
print 'i am some script' . PHP_EOL;
Run Code Online (Sandbox Code Playgroud)
当我从我的Ubuntu命令行运行此脚本时:
# cd MyProject
# php bootstrap.php
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:
5.3.2-1ubuntu4.9
i am some script
Run Code Online (Sandbox Code Playgroud)
createPhar.php文件旨在将项目转换为Phar存档.它看起来像这样:
<?php
$phar = new Phar('MyProject.phar');
$phar->addFile('bootstrap.php');
$phar->setStub( $phar->createDefaultStub('bootstrap.php') );
Run Code Online (Sandbox Code Playgroud)
当我运行该脚本时......
# php createPhar.php
Run Code Online (Sandbox Code Playgroud)
... MyProject.phar在我的项目目录中创建了一个名为的新文件.
|-- bootstrap.php
|-- createPhar.php
`-- MyProject.phar
Run Code Online (Sandbox Code Playgroud)
当我运行phar文件时......
# php MyProject.phar
Run Code Online (Sandbox Code Playgroud)
...我希望看到与运行bootstrap.php脚本时相同的输出.
相反,我什么都看不见 完全没有输出.这意味着我的bootstrap.php …
我正在使用PowerMock,我想知道如何保持子类的所有行为,但是存根super调用可能被子进程覆盖.
说我有这个班:
public class A {
public String someMethod() {
return "I don't want to see this value";
}
}
Run Code Online (Sandbox Code Playgroud)
和一个子类:
public class B extends A {
@Override
public String someMethod() {
return super.someMethod() + ", but I want to see this one";
}
}
Run Code Online (Sandbox Code Playgroud)
如何将呼叫存根到super.someMethod()?
我试过了
@Test
public void test() {
B spy = PowerMockito.spy(new B());
PowerMockito.doReturn("value").when((A)spy).someMethod();
assertEquals("value, but I want to see this one", spi.someMethod());
}
Run Code Online (Sandbox Code Playgroud) 运行此代码:
_foo = MockRepository.GenerateStub<IBar>();
_foo.Stub(x => x.Foo()).Return("sdf");
Run Code Online (Sandbox Code Playgroud)
什么时候
public interface IBar
{
string Foo();
}
public class Bar : IBar
{
public string Foo()
{
throw new NotImplementedException();
}
}
Run Code Online (Sandbox Code Playgroud)
抛出NotSupportedException - "无法创建密封类的模拟".我明白为什么你不能模拟一个密封的类(虽然在TypeMock中有解决方案),但是模拟一个返回密封类(字符串)的类有什么问题?
var MyClassStub = sinon.createStubInstance(MyClass);
Run Code Online (Sandbox Code Playgroud)
MyClassStub不包含静态方法.如何解决?