2014-11-30 1 views
0

Caball을 사용하여 (작은) 실행 파일을 작성하려고하는데, HSpec을 사용하여 테스트 한 유닛입니다. 거의 내 모든 코드 내가 main 기능은 내가 할 수있는 생각하는 지금과 같은 짧은 있지만 run 기능유닛 테스트 주요 기능 : 자체적으로 에러가 발생했습니다.

-- In src/Hecho.hs 
module Main where 
import Library(run) 

main :: IO() 
main = run 

로 내 주요 모듈로 가져 main의 몸을 포함한 별도의 모듈에 Library입니다 내가 테스트를 작성할 수있는 방법이 있는지, 실행 함수가 같은지 확인하거나 다른 방법으로 테스트하는 방법이 있습니까? 문제는 내 사양 파일이 다른 Main 모듈을 정의하고 다른 Main 모듈에서 아무것도 가져올 수 없거나 최소한 그럴 수 없다는 것입니다. 나는 그런 다음

-- In test/HechoSpec.hs 
module Main where 

import Library 
import Main 
import Test.Hspec 

main :: IO() 
main = hspec $ do 
    -- Test definitions 

을 시도하는 경우 예를 들어

, 나는 오류가 발생합니다 :

Module imports form a cycle: 
    module `Main' (test/HechoSpec.hs) imports itself 

주요 기능을 테스트 할 수있는 방법이 있나요?

답변

1

답변 : 분명히 질문은 Library.runmain과 같은지 확인하는 방법입니다.

대답은 할 수 없다는 것입니다. mainIO() 유형의 값이고 IO 작업에 대해 정의 된 Eq은 없습니다. 예를 들어,이 프로그램은 다음과 같은 검사를하지 않습니다 :

main = print "Hello" 

foo = main 

fooEqualsMain = foo == main 
+0

테스트 파일에서 'module Main'을 제거해도 아무런 영향이 없으며 동일한 오류가 발생합니다. [이 답변] (http://stackoverflow.com/a/11112455/1319998) 그것은 모듈이 지정되지 않았을 때 Haskell이 효과적으로'module Main (main)'을 삽입하는 것처럼 보입니다. –

+0

확인. 아마 당신은 응용 프로그램의 메인 모듈을 위해'AppMain.hs'를 사용할 수 있습니까? – ErikR

+0

내 응용 프로그램의 메인 모듈이 이미'Hecho.hs '파일에 있고, 내가 읽었던 것에서 실행 파일이 실행될 때'main' 함수가'Main' 모듈에 있어야한다고 생각합니다. –