News for hackers. Stuff that matters.
Re:Zen and the Art of Unit Testing by beaconstudios on Wednesday March 15, 2017 @07:33AM (#13875362)
I find that you can keep with a class-based approach if you utilise your IOC container in your tests, and only swap out side-effectful classes (ORM, remote service clients, etc) with mocks. That way you don't need to concern yourself with the dependencies of the classes you're testing so you can refactor the underlying relationships and objects with impunity as long as you don't change the interfaces of the classes you're testing.
Re:Zen and the Art of Unit Testing by lubonay on Wednesday March 15, 2017 @07:50AM (#13875438)
I don't know if I asked my question as clearly as possible. Mocking your DB, the file system, the remote API, etc are all a given when doing tests. My question was aimed at trying to find out if it's feasible to replace the imperative Presenter/Service/etc patterns with a more functional approach.

What I'd like to see is testing only the returned value of a function, as opposed to calling a void function and checking whether the injected mocks got the proper method invocations, i.e. whether the desired side effects occurred.

Re:Zen and the Art of Unit Testing by UK-AL on Wednesday March 15, 2017 @08:23AM (#13875580)
Lots of systems separate commands and queries. Commands would be difficult to test without some mocking.
Re:Zen and the Art of Unit Testing by beaconstudios on Wednesday March 15, 2017 @08:19AM (#13875557)
if you're calling a void function then by definition you're calling a function that does nothing but side effects or calling off to other classes. In the latter case, they can be good candidates for refactoring in my experience. A function that does something but doesn't either produce mockable side-effects or return information may be a code smell.
Re:Zen and the Art of Unit Testing by cytzol on Wednesday March 15, 2017 @11:12AM (#13876629)
A function can return void and still throw an exception. (Like one I wrote today, "insert row into table", which throws on failure and return nothing on success.)

A bunch of functions that all return void all being called in a row, though? That's a much smellier smell. What happens if their order gets mixed up, for example.

Re:Zen and the Art of Unit Testing by beaconstudios on Wednesday March 15, 2017 @02:27PM (#13878498)
Testing that function would be a matter of mocking out the database with a class that can emulate the type of failure that would trigger your exception.
Re:Zen and the Art of Unit Testing by cytzol on Wednesday March 15, 2017 @03:04PM (#13878821)
Ooooh, yes. Testing error-handling code is another thing I keep on forgetting to do.
Re:Zen and the Art of Unit Testing by beaconstudios on Thursday March 16, 2017 @05:52AM (#13883762)
it's almost more worthwhile than testing your happy path - when things go wrong you want to have guarantees that they'll be handled correctly and not kill your server.