[erlang-questions] how to run PropEr tests from Eunit?

Paweł Peregud paulperegud@REDACTED
Mon Jul 25 14:19:15 CEST 2011


I wonder how did you solve the issue with eunit hiding output from PropEr?

I do following on test setup:

    meck:new(io, [unstick, passthrough]),
    meck:expect(io, fwrite, fun
                                (FString, Args) -> meck:passthrough([user,
FString, Args])
                            end)

This approach is ugly and also very slow. Does anyone have a better
solution?

Best,
PP.



2011/6/24 Roman Shestakov <romanshestakov@REDACTED>

> thanks a lot Bob, this is very helpful
> Regards, Roman
>
> ------------------------------
> *From:* Bob Ippolito <bob@REDACTED>
> *To:* Frédéric Trottier-Hébert <fred.hebert@REDACTED>
> *Cc:* Roman Shestakov <romanshestakov@REDACTED>;
> erlang-questions@REDACTED
> *Sent:* Fri, 24 June, 2011 18:05:37
> *Subject:* Re: [erlang-questions] how to run PropEr tests from Eunit?
>
> This is what I've been using:
>
> proper_test_() ->
>     [{atom_to_list(F),
>       fun () -> ?assert(proper:quickcheck(?MODULE:F(), [long_result])) end}
>     || {F, 0} <- ?MODULE:module_info(exports), F > 'prop_', F < 'prop`'].
>
> 2011/6/23 Frédéric Trottier-Hébert <fred.hebert@REDACTED>:
> > The simplest way I know to do them individually is with separate tests:
> > proper_test_() ->
> >     [?_assert(proper:quickcheck(prop_some_property())),
> >      ?_assert(proper:quickcheck(prop_some_property())),
> >      ...].
> > You can then create macros to do it for you of the form
> > -define(PROPTEST(A), ?_assert(proper:quickcheck(A()))).
> > and then call
> > proper_test_() ->
> >     [?PROPTEST(prop_something), ?PROPTEST(prop_something_else),
> >      ?PROPTEST(prop_other), ?PROPTEST(prop_last)].
> > or whatever you feel like.
> > If you want to run them all, make sure your module's properties all start
> > with the prefix 'prop_'. Then you can do something like
> > proper_test() ->
> >     [] = proper:module(?MODULE).
> > which will find all the properties of the current module and run them for
> > you. Also, don't forget to always include the proper include file first,
> > because both PropEr and EUnit define a LET macro, but the PropEr one is
> the
> > only one I've seen actively used.
> >
> > --
> > Fred Hébert
> > http://www.erlang-solutions.com
> >
> >
> > On 2011-06-23, at 18:12 PM, Roman Shestakov wrote:
> >
> > hello,
> >
> > I am trying to run PropEr tests from Eunit and I must admit, I can't
> figure
> > out how to run them
> >
> >
> > lets say I want to test the following three functions
> >
> > %%--------------------------------------------------------------------
> > %% @doc
> > %% convert Date to atom
> > %% @end
> > %%--------------------------------------------------------------------
> > -spec date_to_atom(date()) -> atom().
> > date_to_atom({Year, Month, Day}) ->
> >    list_to_atom(date_to_string({Year, Month, Day})).
> >
> > %%--------------------------------------------------------------------
> > %% @doc
> > %% Convert Date to string
> > %% @end
> > %%--------------------------------------------------------------------
> > -spec date_to_string(date()) -> string().
> > date_to_string({Year, Month, Day}) ->
> >    lists:flatten(io_lib:format("~4.10.0B~2.10.0B~2.10.0B", [Year, Month,
> > Day])).
> >
> >
> > %%--------------------------------------------------------------------
> > %% @doc
> > %% convert Date represented as atom into Erlang date format
> > %% @end
> > %%--------------------------------------------------------------------
> > -spec atom_to_date(atom()) -> date().
> > atom_to_date(Date) ->
> >    Year = list_to_integer(lists:sublist(atom_to_list(Date),1,4)),
> >    Month = list_to_integer(lists:sublist(atom_to_list(Date),5,2)),
> >    Day = list_to_integer(lists:sublist(atom_to_list(Date),7,2)),
> >    {Year, Month, Day}.
> >
> >
> >
> > with the following property:
> >
> > proper_time_to_atom() ->
> >    ?FORALL(Date, date(),
> >         begin
> >         EncDate =
> ec_time_fns:atom_to_date(ec_time_fns:date_to_atom(Date)),
> >         EncDate =:= Date
> >         end).
> >
> > running the following from erl works fine
> > proper:quickcheck(ec_time_fns_tests:proper_time_to_atom()).
> >
> >
> > but how do I make eunit to run these test?
> >
> >
> > tried this , but it doesn't seem to work
> >
> > time_to_atom_test_() ->
> >    ?_test(proper:quickcheck(proper_time_to_atom())).
> >
> >
> > any ideas?
> >
> > Regards, Roman
> >
> > _______________________________________________
> > erlang-questions mailing list
> > erlang-questions@REDACTED
> > http://erlang.org/mailman/listinfo/erlang-questions
> >
> >
> > _______________________________________________
> > erlang-questions mailing list
> > erlang-questions@REDACTED
> > http://erlang.org/mailman/listinfo/erlang-questions
> >
> >
>
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://erlang.org/mailman/listinfo/erlang-questions
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20110725/6d695d6f/attachment.htm>


More information about the erlang-questions mailing list