问题列表 - 第10132页

从测试覆盖率中排除代码

我尽可能使用 TDD:

  • 我模拟了我的界面
  • 我使用 IOC,因此可以注入我的模拟对象
  • 我确保我的测试运行并且覆盖率增加,我很高兴。

然后...

  • 我创建派生类来实际执行某些操作,例如访问数据库或写入消息队列等。

这就是代码覆盖率下降的地方——我感到很难过。

但是,我自由地扩展[CoverageExclude]了这些具体的类,覆盖率再次上升。

但是,我没有感到悲伤,而是感到肮脏。尽管无法对具体类进行单元测试,但我还是觉得自己在作弊。

我感兴趣的是听你的项目是如何组织的,也就是你怎么安排实际的代码可以对代码进行测试无法进行测试。

我想也许一个不错的解决方案是将不可测试的具体类型分离到它们自己的程序集中,然后禁止在[CoverageExclude]包含可测试代码的程序集中使用。当在可测试程序集中错误地找到此属性时,这也可以更轻松地创建 NDepend 规则以使构建失败。


编辑:这个问题的本质涉及这样一个事实,即您可以测试使用模拟接口的东西,但您不能(或不应该!)对那些接口的真实实现的对象进行单元测试。下面是一个例子:

public void ApplyPatchAndReboot( )
{ 
    _patcher.ApplyPatch( ) ;
    _rebooter.Reboot( ) ;
}
Run Code Online (Sandbox Code Playgroud)

修补程序和重启程序被注入到构造函数中:

public SystemUpdater(IApplyPatches patcher, IRebootTheSystem rebooter)...
Run Code Online (Sandbox Code Playgroud)

单元测试看起来像:

public void should_reboot_the_system( )
{
    ... new SystemUpdater(mockedPatcher, mockedRebooter);
    update.ApplyPatchAndReboot( );
}
Run Code Online (Sandbox Code Playgroud)

这很好用 - 我的 UNIT-TEST 覆盖率为 100%。我现在写:

public class ReallyRebootTheSystemForReal : IRebootTheSystem
{
    ... call some API to really (REALLY!) reboot
}
Run Code Online (Sandbox Code Playgroud)

我的 UNIT-TEST 覆盖率下降,无法对新课程进行 UNIT-TEST。当然,我会添加一个功能测试并在我有 …

tdd unit-testing mocking inversion-of-control

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

停止从不同域PHP发布数据

我是PHP的初学者.

我要做的是停止来自其他网页的Post Data.

我遇到的问题是让某人复制我的表格并将其粘贴在他们的网站上.我希望能够阻止Post Data在我的电子邮件表单上运行脚本.

我怎样才能做到这一点?如果我不够清楚,请告诉我.

我的PHP联系表单在一个带有条件语句的页面上运行.即如果数据签出,请提交.

php forms post

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

将Lambda与词典结合使用

我正在尝试使用LINQ从字典中检索一些数据.

    var testDict = new Dictionary<int, string>();
    testDict.Add(1, "Apple");
    testDict.Add(2, "Cherry");

    var q1 = from obj in testDict.Values.Where(p => p == "Apple");
    var q2 = from obj in testDict.Where(p => p.Value == "Apple");
Run Code Online (Sandbox Code Playgroud)

上面的行q1和q2都导致编译器错误.

error CS0742: A query body must end with a select clause or a group clause
Run Code Online (Sandbox Code Playgroud)

如何使用LINQ在字典中查找值?

谢谢,

干草堆

c# linq lambda

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

GetHashCode()基于主键 - 是否安全?

类具有ID属性,此属性从SQL表的主键列获取值.

如果我写的话,这是一个好习惯

public override int GetHashCode()
{
    return this.ID + GetType().GetHashCode();
}
Run Code Online (Sandbox Code Playgroud)

进入我的班级?(等于已经以相同的方式覆盖了.)

.net c# hash

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

为什么IE8在我的图像锚标签上添加底部边框?

我知道,这很可怜,但今天早上我只是在我的机器上安装了IE8.马上,我遇到了一个明显的问题,尽管我知道答案是正确地盯着我,但我已经把它弄乱了很久.

首先,这里是网站:www.mchenry.edu 在IE8中查看它并将鼠标悬停在顶部横幅图像上 - 看到一切向下移动?这是某种类型的文字装饰或边框问题,但我无法弄清楚哪一个.在我们的测试环境中,我甚至试图获得真正具体的

#banner p#img a:hover {text-decoration: none};
Run Code Online (Sandbox Code Playgroud)

但这没有任何作用.更令人烦恼的是,我无法让它出现在IE6,7或FF,Safari,Opera等中.头.反对.台.

感谢您有任何见解.

css internet-explorer-8

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

AssertWasCalled在犀牛嘲笑中

我有一个正在测试的对象,它对数据访问对象进行了相当复杂的调用.它看起来像

object.DoSomething(somestring,someObject,someOtherObject,someOtherOtherObject)

在我的测试结构中,我有一个模拟版本的对象,我想测试Dosomething被调用somestring =="value1"和someObject.porpertyA =="value2".

我不能使用简单的AssertWasCalled()重载,因为我不知道(或关心)someOtherObject.我注意到另一个重载需要一个设置约束的动作,但我从未见过它.

c# unit-testing rhino-mocks

7
推荐指数
1
解决办法
4346
查看次数

带有静态类列表的Junit SuiteClasses

SuiteClasses可以很好地处理类的列表{Test1.class,Test2.class},但是当我尝试生成类的静态列表时,它表示不兼容的类型:required java.lang.Class<?>但是找到java.lang.Class<?>[]

我错过了什么?

@RunWith(Suite.class)

@Suite.SuiteClasses(TestSuite.classes)
public class TestSuite {

    public static Class<?> [] classes;

    static {
       classes = new Class<?> [1];
       classes[0] = MyTest.class;
    }
}
Run Code Online (Sandbox Code Playgroud)

java junit4

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

如何使目录可写?

如何从OS X终端创建可写入的目录?

macos terminal

80
推荐指数
4
解决办法
15万
查看次数

使用jQuery进行内联编辑

有关使用jQuery进行"内联"编辑的指南吗?

我知道我在这里没有使用正确的术语,但基本上你点击了一些文本,动态区域变为带有提交按钮的可编辑输入框.

jQuery有内置的功能吗?

jquery

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

无论什么时候Rails cron,设置环境

如果您了解创建cron作业的gem,那么这个问题可能才有意义.我的schedule.rb中有一项任务

every 1.day, :at => '4am' do
  command "cd #{RAILS_ROOT} && rake thinking_sphinx:stop RAILS_ENV=#{RAILS_ENV}"
  command "cd #{RAILS_ROOT} && rake thinking_sphinx:index RAILS_ENV=#{RAILS_ENV}"
  command "cd #{RAILS_ROOT} && rake thinking_sphinx:start RAILS_ENV=#{RAILS_ENV}"
end
Run Code Online (Sandbox Code Playgroud)

但是,当我使用更新我的crontab时

whenever --update-crontab appname --set environment=production
Run Code Online (Sandbox Code Playgroud)

cron作业仍然有RAILS_ENV =开发.我的生产和开发任务现在是一样的,我只需要改变环境变量,因为thinking_sphinx需要知道当前的环境.关于如何做到这一点的任何想法?

谢谢!

cron ruby-on-rails whenever

31
推荐指数
8
解决办法
4万
查看次数