James
James

Reputation:

Haskell IO Testing

I've been trying to figure out if there is already an accepted method for testing file io operations in Haskell, but I have yet to find any information that is useful for what I am trying to do.

I'm writing a small library that performs various file system operations (recursively traverse a directory and return a list of all files; sync multiple directories so that each directory contains the same files using inodes as the equality test and hardlinks...) and I want to make sure that they actually work, but the only way I can think of to test them is to create a temporary directory with a known structure and compare the results from the functions executed on this temporary directory with the known results. The thing is, I would like to get as much test coverage as possible while still being mainly automated: I don't want to have create the directory structure by hand.

I have searched google and hackage, but the packages that I have seen on hackage do not use any testing -- maybe I just picked the wrong ones -- and anything I find on google does not deal with IO testing.

Any help would be appreciated

Thanks, James

Upvotes: 8

Views: 825

Answers (4)

Norman Ramsey
Norman Ramsey

Reputation: 202465

If you want mainly automated testing of monadic code, you might want to look into Monadic QuickCheck. You can write down properties that you think should be true, such as

  • If you create a file with read permission, it will be possible to open the file for reading.

  • If you remove a file, it won't open.

  • Whatever else you think of...

QuickCheck will then generate random tests.

Upvotes: 1

Don Stewart
Don Stewart

Reputation: 137937

HUnit is the usual library for IO-based tests. I don't know of a set of properties/combinators for file actions -- that would be useful.

Upvotes: 2

luvieere
luvieere

Reputation: 37494

Maybe you can find a way to make this work for you.

EDIT:

the packages that I have seen on hackage do not use any testing

I have found an unit testing framework for Haskell on Hackage. Including this framework, maybe you could use assertions to verify that the files you require are present in the directories that you want them to be and they correspond to their intended purpose.

Upvotes: 2

dave4420
dave4420

Reputation: 47042

There is no reason why your test code cannot create a temporary directory, and check its contents after running your impure code.

Upvotes: 1

Related Questions