小编Dav*_*uth的帖子

如何获取传递给 factory_girl 方法的特征列表?

#spec
let(:price) { create :price,:some_trait,:my_trait }

#factory
FactoryGirl.define do
  factory :price, class: 'Prices::Price' do
    ...

    after(:build) do |p,e|

      # How I can get the traits passed to the create method?
      # => [:some_trait,:my_trait]

      if called_traits_does_not_include(:my_trait) # fake code
        build :price_cost,:order_from, price:p
      end
    end

    ...
  end
end
Run Code Online (Sandbox Code Playgroud)

我如何获得create在工厂after(:build)回调中传递的特征?

ruby rspec factory-bot

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

将 SBT 连续测试与 IntelliJ 集成

SBT 支持开箱即用的连续测试。我如何将其集成到 IntelliJ 中,以便 IntelliJ 向我显示失败的测试(类似于 .NET 的精彩 NCrunch)?

tdd unit-testing intellij-idea sbt continuous-testing

5
推荐指数
0
解决办法
320
查看次数

我可以为RSpec匹配器加上别名吗?

我得到了两个匹配器,它们的名称相同:

RSpec::Matchers.define :be_the_downcased_version_of do |actual|
    match do |actual|
        @actual = actual
        @expected = expected

        @actual == @expected.downcase
    end

    failure_message do |actual|
        "Expected #{@actual.inspect} to be the downcased version of #{expected.inspect}.\nIt was not: #{@actual.inspect}"
    end

    failure_message_when_negated do |actual|
        "Expected #{@actual.inspect} to not be the downcased version of #{expected.inspect}.\nIt was: #{@actual.inspect}"
    end

    description do
        "be the downcased version of #{expected.inspect}"
    end
end

RSpec::Matchers.define :return_the_downcased_version_of do |actual|
    match do |actual|
        @actual = actual
        @expected = expected

        @actual == @expected.downcase
    end

    failure_message do |actual| …
Run Code Online (Sandbox Code Playgroud)

ruby rspec

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

如何在RSpec中的before(:suite)/ before(:all)钩子中访问标记过滤器?

我想访问命令行中传递的标记过滤器

命令行

rspec --tag use_ff
Run Code Online (Sandbox Code Playgroud)

RSpec配置

RSpec.configure do |config|
  config.before :suite, type: :feature do 
    # how do I check if use_ff filter was specified in the command line?
    if filter[:use_ff]
      use_selenium
    else
      use_poltergeist
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

before(:suite)钩子中,我想访问配置中命令行中指定的标记过滤器.

根据rspec的核心代码库包含标记过滤器被存储在inclusion_filter RSpec.configuration的.从理论上讲,我应该能够按如下方式访问它们:

RSpec.configure do |config|
  config.before :suite, type: :feature do 
    if config.filter[:use_ff] # filter is an alias for inclusion_filter
      use_selenium
    else
      use_poltergeist
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

但是,出于某种原因,即使从命令行传递标记,我也会得到一个空哈希.

ruby rspec

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

Flyweight设计模式和Java缓存之间有什么区别

我了解了Flyweight设计模式,并了解它存储了可以共享的对象,从而节省了堆的使用。Java缓存还保存了以后可以重用的对象,以节省内存。那么Flyweight设计模式和Java缓存之间的真正区别是什么?

java caching design-patterns flyweight-pattern

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

依赖倒置原则是否意味着我必须为每个模块创建一个接口?

如果我希望我的代码遵循SOLID原则,特别是依赖性反转原则,这是否意味着我必须为每个模块创建一个接口(抽象),即使它只有一个实现?

在我看来,并根据这些帖子:

http://josdejong.com/blog/2015/01/06/code-reuse/

http://blog.ploeh.dk/2010/12/02/Interfacesarenotabstractions/

为每个模块创建"抽象"是代码混乱并违反了YAGNI原则.

我的经验法则是:不要使用依赖注入,或者为模块创建接口,除非它有多个实现(第二个实现可以是用于数据库/服务器/文件模块的单元测试的模拟类).

有人可以为我清楚这一点吗?SOLID是否意味着我必须注入每个模块并对其进行抽象?如果是的话,是不是只是在很多时候我们根本不会使用它?

architecture dependency-injection solid-principles dependency-inversion

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

在使用设计模式时,您可以在多大程度上防止修改现有代码?

我正在学校参加设计模式课程,并阅读了Head First Design Patterns的一些章节.我想知道的是设计模式在多大程度上可以防止重写现有代码.

我们以Duck课程和FlyBehavior课程为例.我有public static void main(String[] args)以下代码:

Duck mallard = new MallardDuck(new FlyWithWings());
Run Code Online (Sandbox Code Playgroud)

我是否正确地说,main()当您想要添加新策略时,您不得不修改方法?这样,您正在修改现有代码,对吧?我特别指的是提到具体策略类的部分:new FlyWithWings().

如果在代码中实现了工厂方法模式,则可能会阻止具体的类(FlyWithWings)被提及:

public FlyBehavior returnBehavior(FlyBehaviorFactory factory, String behaviorType) {
    return factory.getFlyBehavior(behaviorType);
}
Run Code Online (Sandbox Code Playgroud)

因此,请使用以下代码行:

Duck mallard = new MallardDuck(returnBehavior(flyFactory, "wings"));
Run Code Online (Sandbox Code Playgroud)

这样,程序的某个部分不必知道要使用的FlyBehaviorFactory.但是,您的main()方法仍然需要在returnBehavior方法中指定某些参数,以便了解哪个工厂将创建什么策略.因此,我是否正确地说,main()如果我添加了一个新的FlyBehavior类,你仍然需要修改,并希望将其作为参数添加到returnBehavior()

可以进一步改善这种情况吗?

java methods design-patterns factory strategy-pattern

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

如何使用rspec/rspec-mocks存根类方法

我正在使用rspec-mock进行测试驱动开发.我开始实现一个单独的类,并使用rspec-mock来模拟/存根其他类.模拟尚未实现的类的对象效果很好.但是,当我尝试模拟一个尚不存在的类的类方法时,我还没有成功.我的类"Hashes"应该有一个类方法"calculate_hashes"接收文件名并返回一个哈希值.

我试过了

 allow(Hashes).to receive(:calculate_hash) do |file| 
      # looks up what to return
 end
Run Code Online (Sandbox Code Playgroud)

这给出了错误"哈希不是一个类".然后我实施了一个类"哈希"

class Hashes
end
Run Code Online (Sandbox Code Playgroud)

然后只尝试以相同的方式存根类方法.这给出了错误"Hashes没有实现:calculate_hash"当我然后将方法添加到我的类定义时:

class Hashes
    def self.calculate_hash(filename)
    end
end
Run Code Online (Sandbox Code Playgroud)

它最终工作,我的这个类方法的存根使用"allow(Hashes)"工作,如上例所示.我只是想知道是否有办法在不编写这个类骨架的情况下完成这个.

或者我可能试图以不恰当的方式完成某些事情?或者rspec-mock可能不是正确的工具呢?

任何帮助是极大的赞赏.

ruby rspec mocking rspec-mocks

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

我可以控制IntelliJ在提供完成时所包含的步骤名称吗?

我使用CucumberGherkin语法.

我想在组合框中只显示相关的步骤名称.我知道我需要做的"离线"工作.

我的问题是,是否可以选择哪些步骤名称将进入组合框?(而不是所有步骤名称)

看图像:

在此输入图像描述

提前致谢.

automation intellij-idea cucumber gherkin

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

Arrange、Act、Assert 模式中的 Arrange 和 Act 有什么区别?

我真的不明白单元测试中模式的排列部分和行为部分之间的区别。仅排列是否意味着对象的创建?我们为什么要首先将 Arrange 与 Act 部分分开,以及判断某个东西是否属于 Act 部分而不属于 Arrange 部分的标准是什么?在我看来,一切都属于安排部分,因为我们为断言“安排测试”,不是吗?

testing unit-testing arrange-act-assert

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