질문을 잘못 말하면 정확한 내용을 입력하십시오.rspec 단위 테스트에서 기대와 함께 조롱을 선택하십시오.
class Filters
def self.good ducks
ducks.select(&:good?)
end
end
이 같은 방법을 테스트 할 물론 가능하다 :
다음 코드 가정
describe Filters, '#good' do
let(:good) { double(:good, good?: true) }
let(:bad) { double(:bad, good?: false) }
subject { Filters.good(ducks) }
context 'none' do
let(:ducks) { [] }
it { is_expected.to eq [] }
end
context 'one good' do
let(:ducks) { [good] }
it { is_expected.to eq [good] }
end
context 'one bad' do
let(:ducks) { [bad] }
it { is_expected.to eq [] }
end
context 'one good and one bad' do
let(:ducks) { [good, bad] }
it { is_expected.to eq [good] }
end
context 'some good and some bad' do
let(:ducks) { [good, bad, bad, good, bad, good] }
it { is_expected.to eq [good, good, good] }
end
end
을하지만 모든 없음 그러나 물론 실제로 사건 (모든 열거/하나/일부/많은 조합에 대한 진실/거짓 good
상태) 나는 실제로 내가 단위 방법을 테스트하고 있지만 통합 이후로 그것을 테스트하자 ""에 select
"leak"의 동작에 대한 지식이 있으면 테스트 사례 수가 늘어납니다. 어떤 의미에서는 내 테스트 케이스가 select
메소드의 동작을 테스트하고 있습니다.
내게는 mocking을 사용하고 테스트보다는 검사에서와 같이 메서드가 올바르게 위임하는 것이 더 적합합니다. 하나가 스스로 작성한 기능과 통합했다면 할 수있는 것처럼. 예를 들어 우리와 비슷한 것. expect(obj).to receive(:foo).with(:bar)
라고 할 수 있습니다.
아래의 예는 작동하지 않지만 모든 사례를 나열하는 대신 내가하고 싶은 생각을 전달한다고 생각합니다.
describe Filters, '#good' do
it 'returns only good ones' do
ducks = double(:ducks)
expect(ducks).to receive(:filter).with(:good?).and_return(:filtered)
expect(Filters.good(ducks).to eq)
end
end
예는 인수가 쓸모없는 방법이라고 말하고 Filter.good
의 사용자가 단순히 직접적으로 select
-statement를 이동하는 경우에만 필요가 이동한다는 사실을 고려하시기 바랍니다 select
를 사용하는 것을 방지하기 위해 너무 사소한 것처럼 보일 수 있습니다 다른 위치로 테스트.
내가 여기에 근본적인 것을 오해하고 있거나 간과하고 있습니까?
Ps 1. 간략하게 몇 가지 테스트 케이스를 무시합니다.
시 2. 내가 단위하지 통합의 필요성을 강조하고있어 이유의 짧은 버전이 시험이 비디오입니다 : https://www.youtube.com/watch?v=VDfX44fZoMc
편집 : 이 질문 문구에 더 좋은 방법은 아마도 것 : 첫 번째 테스트는 클래식리스트이 Filters.good
을 테스트하는 방법의 요지의 예입니다. 그러나 모의 객체은 어떻게 테스트합니까?
해결책을 찾았습니까? –
@PaulFioravanti 제공하신 답변에 감사드립니다. 그러나 아직 해결책이 없다고 생각됩니다. 질문에 대한 설명을 추가하고 있습니다. – chris