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

Fred Hebert mononcqc@REDACTED
Mon Jul 25 14:59:22 CEST 2011


You can just change the process' group leader back to the 'user' process (or
any other process depending on your app) from within the test, and then set
it back to what it was before using erlang:group_leader/0 and
erlang:group_leader/2.

On Mon, Jul 25, 2011 at 8:19 AM, Paweł Peregud <paulperegud@REDACTED>wrote:

> 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
>>
>>
>
> _______________________________________________
> 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/3fe3c846/attachment.htm>


More information about the erlang-questions mailing list