Не в области видимости: конструктор типа или класс "Test.Framework.TestSuite" при попытке создания модульных тестов

Я пишу небольшую библиотеку на Хаскеле и хочу, чтобы ее сопровождали тесты. Для тестирования я намерен использовать HFT, а проектом в целом управляет стек. stack test по какой-то причине происходит сбой со следующим выводом:

[1 of 2] Compiling Main             ( test/Ini.hs, .stack-work/dist/x86_64-linux-tinfo6/Cabal-2.0.1.0/build/ini-tests/ini-tests-tmp/Main.o )                                                                      │····························
[2 of 2] Compiling Paths_schemer    ( .stack-work/dist/x86_64-linux-tinfo6/Cabal-2.0.1.0/build/ini-tests/autogen/Paths_schemer.hs, .stack-work/dist/x86_64-linux-tinfo6/Cabal-2.0.1.0/build/ini-tests/ini-tests-tm│····························
p/Paths_schemer.o )                                                                                                                                                                                               │····························
                                                                                                                                                                                                                  │····························
/stuff/projects/schemer/.stack-work/dist/x86_64-linux-tinfo6/Cabal-2.0.1.0/build/ini-tests/autogen/Paths_schemer.hs:54:39: error:                                                                                 │····························
    Not in scope: type constructor or class ‘Test.Framework.TestSuite’                                                                                                                                            │····························
    No module named ‘Test.Framework’ is imported.                                                                                                                                                                 │····························
                                                                                                                                                                                                                  │····························
/stuff/projects/schemer/.stack-work/dist/x86_64-linux-tinfo6/Cabal-2.0.1.0/build/ini-tests/autogen/Paths_schemer.hs:55:38: error:                                                                                 │····························
    Not in scope: ‘Test.Framework.makeTestSuite’                                                                                                                                                                  │····························
    No module named ‘Test.Framework’ is imported.                                                                                                                                                                 │····························

Мой файл Ini.hs, который позже будет содержать тесты, очень прост, просто

import Test.Framework

main :: IO ()
main = htfMain htf_thisModulesTests

мой package.yaml является

name:                schemer
version:             0.1.0.0
github:              "mpevnev/schemer"
license:             BSD3
author:              "Michail Pevnev"
maintainer:          "mpevnev@gmail.com"
copyright:           ""

extra-source-files: []

# Metadata used when publishing your package
# synopsis:            Short description of your package
# category:            Web

# To avoid duplicated efforts in documentation and dealing with the
# complications of embedding Haddock markup inside cabal files, it is
# common to point users to the README.md file.
description:         Please see the README on GitHub at <https://github.com/mpevnev/schemer#readme>

dependencies:
- attoparsec
- base >= 4.7 && < 5
- text


library:
  source-dirs: src

tests:
  ini-tests:
    main:                Ini.hs
    source-dirs:         test
    ghc-options:
    - -threaded
    - -rtsopts
    - -with-rtsopts=-N
    - -F
    - -pgmF htfpp
    dependencies:
    - schemer
    - text
    - HTF

Вот сгенерированный schemer.cabal:

-- This file has been generated from package.yaml by hpack version 0.28.2.
--
-- see: https://github.com/sol/hpack
--
-- hash: 17ae623236b8f5b101f56373c975656e898efa7506acb143db7375f229509a79

name:           schemer
version:        0.1.0.0
description:    Please see the README on GitHub at <https://github.com/mpevnev/schemer#readme>
homepage:       https://github.com/mpevnev/schemer#readme
bug-reports:    https://github.com/mpevnev/schemer/issues
author:         Michail Pevnev
maintainer:     mpevnev@gmail.com
license:        BSD3
license-file:   LICENSE
build-type:     Simple
cabal-version:  >= 1.10

source-repository head
  type: git
  location: https://github.com/mpevnev/schemer

library
  exposed-modules:
      Control.Scheme.Ini
      Control.Schemer
  other-modules:
      Paths_schemer
  hs-source-dirs:
      src
  build-depends:
      attoparsec
    , base >=4.7 && <5
    , text
  default-language: Haskell2010

test-suite ini-tests
  type: exitcode-stdio-1.0
  main-is: Ini.hs
  other-modules:
      Paths_schemer
  hs-source-dirs:
      test
  ghc-options: -threaded -rtsopts -with-rtsopts=-N -F -pgmF htfpp
  build-depends:
      HTF
    , attoparsec
    , base >=4.7 && <5
    , schemer
    , text
  default-language: Haskell2010

Я не уверен, что не так и что это за Paths_schemer. Помощь приветствуется.

1 ответ

Решение

Варианты -F -pgmF htfpp включены глобально. Это применяет препроцессор HTF ко всем файлам набора тестов, включая автоматически сгенерированные Paths_schemer,

Более масштабируемое решение - включить препроцессор только для импортируемых файлов. Test.Framework, с использованием OPTIONS_GHC Прагма в каждом:

{-# OPTIONS_GHC -F -pgmF htfpp #-}

Другой способ установить other-modules: [] в разделе набора тестов в package.yaml чтобы избежать генерации Paths_schemer, хотя это только решает проблему для этого одного модуля.

Другие вопросы по тегам