2014-09-02 2 views
0

운영 체제를 호출하고 실제 데이터를 얻는 기능이있어서 호출 할 때마다 결과가 달라집니다. 호출을하는 함수는 5 개의 함수 호출 뒤에 중첩되어 있습니다. 즉, 호출 스택은 OS 호출을하기 전에 5 단계 깊이입니다.단위 백엔드 프로세스를 코드 구조 내에서 중첩 된 상태로 테스트 : Elxir

최상위 기능을 테스트하려면 반복 가능한 결과가 필요합니다. 테스트를 수행하는 두 가지 방법이 있습니다. 5 개의 함수 호출 각각에 여분의 매개 변수를 추가하고 "운영 체제 호출"을 함수로 전달하십시오. 그런 다음 단위 테스트에서 운영 체제 함수 호출은 정적 텍스트를 반환하는 함수로 바뀝니다.
2. 테스트 환경에서 실행중인 경우 응용 프로그램에서 테스트를 인식하도록하고 OS 함수가 정적 텍스트를 반환하도록합니다. (나는 이것을하는 방법을 모른다)

나는 알고있다; 코드 구조 안에 중첩되어있는 서버 프로세스를 테스트 할 때 권장되는 Elixir 방식은 무엇입니까?

답변

4

당신은 OS에 대한 호출 시뮬레이션 mocks을 사용할 수 있습니다 : 당신이 실제로 당신이 할 수있는 웹 페이지를 가져 오는 않고 웹 페이지 만 얻을 HTTPotion.get를 호출하는 코드를 테스트하기를 원한다면, 간단한 예를 들어

을 이 같은.

defmodule MyTest do 
    use ExUnit.Case, async: false 

    import Mock 

    test_with_mock "test_name", HTTPotion, 
    [get: fn(_url) -> "<html></html>" end] do 
    HTTPotion.get("http://example.com") 
    assert called HTTPotion.get("http://example.com") 
    end 
end 

with_mock은 모의 모듈을 생성합니다. 키워드 목록은 mock에서 제공하려는 함수에 대한 모의 구현 세트를 제공합니다 (이 경우에는 단지 get). 안에 with_mock 우리는 테스트 코드를 연습하고 우리는 전화가 called을 사용하여 예상했던대로 이루어 졌는지 확인하고 우리가 예상 한 호출의 예를 제공한다. (두 번째 인수 인 :_은 특별한 의미가있다.

+0

모의는 "옵션 2"를 구현하는 한 방법 일 수 있습니다. 위. – steve77

+0

@ steve77 - 조롱의 전체 아이디어는 테스트를 인식하지 않고 앱을 테스트 할 수 있다는 것입니다. –