On Tuesday, June 5, 2012 at 9:55 AM, Zach Mathew wrote:
> I'm not suggesting that CBVs make it harder to test (I actually think it 
> should be no different because the tests should avoid being implementation 
> specific). I just feel that the pattern of testing/refactoring is different 
> than the typical TDD approach (one could argue that this is not necessarily a 
> bad thing - but that's a whole another can of worms).
> 
> I think Marc makes a very valid point about CBVs being well suited for unit 
> testing. This I agree with. But I typically try to avoid unit testing as much 
> as possible in favour of a more "outside-in" approach (ie. integration 
> testing).
> 
> For example, I would avoid unit testing the "get_context_data" method on a 
> CBV and instead have a test that performs a request on the view and tests the 
> context variables.
This is going to be slower than just unit testing get_context_data. 
> 
> I'm beginning to think that the divisions on this issue among developers 
> might be tied to development style. This would explain why some people love 
> them and some people hate them.
> 
> 
> 
> On Tuesday, June 5, 2012 2:02:14 AM UTC-4, Marc Tamlyn wrote:
> > There is a plan to do some work on the docs at the djangocon sprints - in 
> > particular trying to get some examples of when you 'could' and when you 
> > 'should not' use the generic CBVs.
> > 
> > With regards to Zach's point about TDD testing - some of that may simply be 
> > familiarity. I don't know about you but it would have been very difficult 
> > for me to get into successfully TDDing a functional view until I'd written 
> > several dozen views and knew what the pattern is. You can still test the 
> > CBV top to bottom, exactly as you would with a function based view. Yes 
> > there may be some shift to conventions, but that will come with familiarity.
> > 
> > I think part of the important difference is that when you look at a CBV for 
> > the purposes of unit testing it, you feel very quickly that you should be 
> > testing the individual methods. This is actually really nice and gives a 
> > lot more branch-coverage without rerunning the same 4 database queries 
> > every time for variables which aren't used. Without CBVs a complex view can 
> > easily extend over 50 or so lines, whereas it's more natural to split this 
> > up and test the sections independently with a Class based system. I know in 
> > general we should be 'writing less view code' and pushing the logic 
> > elsewhere, but that depends on what that logic is - for example the view 
> > layer needs to decide whether to return JSON or HTML depending on certain 
> > headers in the request, and that is more easily testable as an overridden 
> > render to response method than as the last 4 lines of a 50 line view.
> > 
> > Marc
> -- 
> You received this message because you are subscribed to the Google Groups 
> "Django developers" group.
> To view this discussion on the web visit 
> https://groups.google.com/d/msg/django-developers/-/_9hq-OjYc3wJ.
> To post to this group, send email to django-developers@googlegroups.com 
> (mailto:django-developers@googlegroups.com).
> To unsubscribe from this group, send email to 
> django-developers+unsubscr...@googlegroups.com 
> (mailto:django-developers+unsubscr...@googlegroups.com).
> For more options, visit this group at 
> http://groups.google.com/group/django-developers?hl=en.

-- 
You received this message because you are subscribed to the Google Groups 
"Django developers" group.
To post to this group, send email to django-developers@googlegroups.com.
To unsubscribe from this group, send email to 
django-developers+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-developers?hl=en.

Reply via email to