일부 셸 명령을 자동화하는 Ruby 라이브러리를 작성 중입니다. 명령은 상당히 복잡한 비즈니스 로직 집합에 따라 달라집니다.쉘 명령어를 생성하거나 사용하는 단위 테스트 코드는 어떻게 작성합니까?
이러한 셸 명령을 생성하는 코드를 단위 테스트하고 싶습니다. 내가 어떻게 그럴 수 있을지 모르겠다. 커맨드의 정확한 텍스트는별로 신경 쓰지 않지만 커맨드가 로직의 영향을 받는지 확인하고 싶습니다. 물론 유닛 테스트의 목적이기도합니다.
내 생각은 명령 생성을 매우 얇은 템플리트와 같은 객체 (또는 템플릿 만)로 캡슐화하고 쉘 명령을 생성해야 할 때 논리 코드에서 해당 객체를 호출 한 다음 해당 논리 코드를 확인할 수 있습니다 템플릿 코드에서 예상되는 메서드를 호출합니다. 여전히 템플릿 코드는 테스트되지 않은 채로 남아 있지만 로직을 검증하는 것만 큼 중요하지는 않습니다. 기본적으로
class DirectoryMaker
def initialize(generator)
@generator = generator
end
def make_directory(name)
if name=='baz'
raise 'YOURE NOT ALLOWED TO DO THAT'
else
@generator.mkdir(name)
end
end
end
describe DirectoryMaker do
it 'should produce a mkdir command' do
generator = double('Generator')
generator.should_receive('mkdir').with('foo').and_return('')
described_class.new(generator).make_directory('foo')
end
it 'should raise an exception when passed baz as a name' do
expect {
described_class.new(double('Generator')).make_directory('baz')
}.to raise_error
end
end
아, 내 질문에 대답 한 것 같습니다.하지만 더 좋은 제안이 있으면 듣게 될 것입니다.