Testing Blog

TotT: Partial Mocks using Forwarding Objects

torsdag, februar 19, 2009
Share on Twitter Share on Facebook
Google
Etiketter: TotT

6 kommentarer :

  1. Nick19. februar 2009 kl. 11:59:00 PST

    Denne kommentaren har blitt fjernet av forfatteren.

    SvarSlett
    Svar
      Svar
  2. Szczepan Faber20. februar 2009 kl. 04:43:00 PST

    Cool, but I'd rather stick with simple & readable tests which is exact opposite of what you're showing :). Simple tests push simple implementation.

    SvarSlett
    Svar
      Svar
  3. Martin Letis21. februar 2009 kl. 14:52:00 PST

    EasyMock's Class Extension gives you all that for free.

    code:
    see http://www.easymock.org/EasyMock2_4_ClassExtension_Documentation.html
    the signature is: createMock(java.lang.Class<T> toMock, java.lang.reflect.Method... mockedMethods)

    while this achieves your goal, without need to write additional delegates, I think that in some cases partial mocking is an indicator you need to refactor.

    why would you need partial mocking in a real world scenario? that means you want to test your unit in sub-isolation, and that means you can probably split or refactor and reorganize the code.

    SvarSlett
    Svar
      Svar
  4. Steve Freeman14. mars 2009 kl. 06:30:00 PDT

    I think partial mocks should have a huge health warning on them. They imply that there's a role in there that's implicit and that ought to be brought out, and they make refactoring harder. Repeat after me, "Composition over inheritance".

    The only time I consider using them is to override a factory method that creates an object that's used internally -- and then only until I can figure out a better plan.

    SvarSlett
    Svar
      Svar
  5. Unknown12. oktober 2009 kl. 10:18:00 PDT

    Here is my predicament...

    I have read a lot of the papers/docs out right now about using partial mocks, etc. They usually indicate that if you are using them really look at the design of your software. I agree and disagree leading to my predicament:)

    I can easily make my object under test a JavaBean style object so that an object that would normally be encapsulated via a "new SomeObject()" can be directly set on the object under test. This is my predicament...usually encapsulation is a good thing making an API easier to program against and less error prone, however when using Mocks (EasyMock in my case) and you want to test, for example a "void" method and ensure that "fileInputStream.close()" gets called in the implementation code, do you expose a "setFileInputStream()" method on the interface or use a partial mock and keep this functionality encapsulated inside a method called, let's say "createInputStream()" which can be partially mocked???

    One of the things I really like about following a TDD paradigm with a mock framework such as EasyMock is that it lets you easily test "void" methods and ensure important functionality is actually implemented (for instance inputStream.close()). I just wanted to get others thoughts on "encapsulation vs. ease of testing"...

    SvarSlett
    Svar
      Svar
  6. Szczepan Faber17. oktober 2009 kl. 03:39:00 PDT

    Karim,

    I guess all we want to say is that partial mock is a warning that the design could be better. Your example describes inputStream.close() as something that can be nicely tested with partial mocks. Say I really need to make sure I never forget to call close(). I would prefer to design the code in a way I cannot forget it. For example (not sure if it makes sense because I'm just making it up :)

    interface InputStreamHandler {
    Object handle(InputStream is);
    }

    class ClosingHandler implements InputStreamHandler {
    public ClosingHandler(InputStreamHandler ish) {}
    public Object handle(InputStream is) {
    //ish.handle & is.close
    }
    }

    SvarSlett
    Svar
      Svar
Legg til kommentar
Last inn mer ...

The comments you read and contribute here belong only to the person who posted them. We reserve the right to remove off-topic comments.

  

Labels


  • TotT 113
  • GTAC 61
  • James Whittaker 42
  • Misko Hevery 32
  • Code Health 31
  • Anthony Vallone 27
  • Patrick Copeland 23
  • Jobs 18
  • Andrew Trenk 13
  • C++ 11
  • Patrik Höglund 8
  • JavaScript 7
  • Allen Hutchison 6
  • George Pirocanac 6
  • Zhanyong Wan 6
  • Harry Robinson 5
  • Java 5
  • Julian Harty 5
  • Adam Bender 4
  • Alberto Savoia 4
  • Ben Yu 4
  • Erik Kuefler 4
  • Philip Zembrod 4
  • Shyam Seshadri 4
  • Chrome 3
  • Dillon Bly 3
  • John Thomas 3
  • Lesley Katzen 3
  • Marc Kaplan 3
  • Markus Clermont 3
  • Max Kanat-Alexander 3
  • Sonal Shah 3
  • APIs 2
  • Abhishek Arya 2
  • Alan Myrvold 2
  • Alek Icev 2
  • Android 2
  • April Fools 2
  • Chaitali Narla 2
  • Chris Lewis 2
  • Chrome OS 2
  • Diego Salas 2
  • Dori Reuveni 2
  • Jason Arbon 2
  • Jochen Wuttke 2
  • Kostya Serebryany 2
  • Marc Eaddy 2
  • Marko Ivanković 2
  • Mobile 2
  • Oliver Chang 2
  • Simon Stewart 2
  • Stefan Kennedy 2
  • Test Flakiness 2
  • Titus Winters 2
  • Tony Voellm 2
  • WebRTC 2
  • Yiming Sun 2
  • Yvette Nameth 2
  • Zuri Kemp 2
  • Aaron Jacobs 1
  • Adam Porter 1
  • Adam Raider 1
  • Adel Saoud 1
  • Alan Faulkner 1
  • Alex Eagle 1
  • Amy Fu 1
  • Anantha Keesara 1
  • Antoine Picard 1
  • App Engine 1
  • Arham Jain 1
  • Ari Shamash 1
  • Arif Sukoco 1
  • Bartosz Papis 1
  • Benjamin Pick 1
  • Bob Nystrom 1
  • Bruce Leban 1
  • Carlos Arguelles 1
  • Carlos Israel Ortiz García 1
  • Cathal Weakliam 1
  • Christopher Semturs 1
  • Clay Murphy 1
  • Dagang Wei 1
  • Dan Maksimovich 1
  • Dan Shi 1
  • Dan Willemsen 1
  • Dave Chen 1
  • Dave Gladfelter 1
  • David Bendory 1
  • David Mandelberg 1
  • Derek Snyder 1
  • Diego Cavalcanti 1
  • Dmitry Vyukov 1
  • Eduardo Bravo Ortiz 1
  • Ekaterina Kamenskaya 1
  • Elliott Karpilovsky 1
  • Elliotte Rusty Harold 1
  • Espresso 1
  • Felipe Sodré 1
  • Francois Aube 1
  • Gene Volovich 1
  • Google+ 1
  • Goran Petrovic 1
  • Goranka Bjedov 1
  • Hank Duan 1
  • Havard Rast Blok 1
  • Hongfei Ding 1
  • Jason Elbaum 1
  • Jason Huggins 1
  • Jay Han 1
  • Jeff Hoy 1
  • Jeff Listfield 1
  • Jessica Tomechak 1
  • Jim Reardon 1
  • Joe Allan Muharsky 1
  • Joel Hynoski 1
  • John Micco 1
  • John Penix 1
  • Jonathan Rockway 1
  • Jonathan Velasquez 1
  • Josh Armour 1
  • Julie Ralph 1
  • Kai Kent 1
  • Kanu Tewary 1
  • Karin Lundberg 1
  • Kaue Silveira 1
  • Kevin Bourrillion 1
  • Kevin Graney 1
  • Kirkland 1
  • Kurt Alfred Kluever 1
  • Kyle Freeman 1
  • Manjusha Parvathaneni 1
  • Marek Kiszkis 1
  • Marius Latinis 1
  • Mark Ivey 1
  • Mark Manley 1
  • Mark Striebeck 1
  • Matt Lowrie 1
  • Meredith Whittaker 1
  • Michael Bachman 1
  • Michael Klepikov 1
  • Mike Aizatsky 1
  • Mike Wacker 1
  • Mona El Mahdy 1
  • Noel Yap 1
  • Palak Bansal 1
  • Patricia Legaspi 1
  • Per Jacobsson 1
  • Peter Arrenbrecht 1
  • Peter Spragins 1
  • Phil Norman 1
  • Phil Rollet 1
  • Pooja Gupta 1
  • Project Showcase 1
  • Radion Khait 1
  • Radoslav Vasilev 1
  • Rahul Singal 1
  • Rajat Dewan 1
  • Rajat Jain 1
  • Rich Martin 1
  • Richard Bustamante 1
  • Roman Govsheev 1
  • Roshan Sembacuttiaratchy 1
  • Ruslan Khamitov 1
  • Saicharan Nimmala 1
  • Sam Lee 1
  • Sean Jordan 1
  • Sebastian Dörner 1
  • Shahar Roth 1
  • Sharon Zhou 1
  • Shiva Garg 1
  • Siddartha Janga 1
  • Simran Basi 1
  • Stan Chan 1
  • Stephen Ng 1
  • Tejas Shah 1
  • Test Analytics 1
  • Test Engineer 1
  • Tim Lyakhovetskiy 1
  • Tom O'Neill 1
  • Vojta Jína 1
  • Zhe Lu 1
  • automation 1
  • dead code 1
  • iOS 1
  • mutation testing 1


Archive


  • ►  2026 (7)
    • ►  juli (1)
    • ►  juni (1)
    • ►  mai (2)
    • ►  apr. (1)
    • ►  mars (2)
  • ►  2025 (3)
    • ►  okt. (1)
    • ►  sep. (1)
    • ►  jan. (1)
  • ►  2024 (13)
    • ►  des. (1)
    • ►  okt. (1)
    • ►  sep. (1)
    • ►  aug. (1)
    • ►  juli (1)
    • ►  mai (3)
    • ►  apr. (3)
    • ►  mars (1)
    • ►  feb. (1)
  • ►  2023 (14)
    • ►  des. (2)
    • ►  nov. (2)
    • ►  okt. (5)
    • ►  sep. (3)
    • ►  aug. (1)
    • ►  apr. (1)
  • ►  2022 (2)
    • ►  feb. (2)
  • ►  2021 (3)
    • ►  juni (1)
    • ►  apr. (1)
    • ►  mars (1)
  • ►  2020 (8)
    • ►  des. (2)
    • ►  nov. (1)
    • ►  okt. (1)
    • ►  aug. (2)
    • ►  juli (1)
    • ►  mai (1)
  • ►  2019 (4)
    • ►  des. (1)
    • ►  nov. (1)
    • ►  juli (1)
    • ►  jan. (1)
  • ►  2018 (7)
    • ►  nov. (1)
    • ►  sep. (1)
    • ►  juli (1)
    • ►  juni (2)
    • ►  mai (1)
    • ►  feb. (1)
  • ►  2017 (17)
    • ►  des. (1)
    • ►  nov. (1)
    • ►  okt. (1)
    • ►  sep. (1)
    • ►  aug. (1)
    • ►  juli (2)
    • ►  juni (2)
    • ►  mai (3)
    • ►  apr. (2)
    • ►  feb. (1)
    • ►  jan. (2)
  • ►  2016 (15)
    • ►  des. (1)
    • ►  nov. (2)
    • ►  okt. (1)
    • ►  sep. (2)
    • ►  aug. (1)
    • ►  juni (2)
    • ►  mai (3)
    • ►  apr. (1)
    • ►  mars (1)
    • ►  feb. (1)
  • ►  2015 (14)
    • ►  des. (1)
    • ►  nov. (1)
    • ►  okt. (2)
    • ►  aug. (1)
    • ►  juni (1)
    • ►  mai (2)
    • ►  apr. (2)
    • ►  mars (1)
    • ►  feb. (1)
    • ►  jan. (2)
  • ►  2014 (24)
    • ►  des. (2)
    • ►  nov. (1)
    • ►  okt. (2)
    • ►  sep. (2)
    • ►  aug. (2)
    • ►  juli (3)
    • ►  juni (3)
    • ►  mai (2)
    • ►  apr. (2)
    • ►  mars (2)
    • ►  feb. (1)
    • ►  jan. (2)
  • ►  2013 (16)
    • ►  des. (1)
    • ►  nov. (1)
    • ►  okt. (1)
    • ►  aug. (2)
    • ►  juli (1)
    • ►  juni (2)
    • ►  mai (2)
    • ►  apr. (2)
    • ►  mars (2)
    • ►  jan. (2)
  • ►  2012 (11)
    • ►  des. (1)
    • ►  nov. (2)
    • ►  okt. (3)
    • ►  sep. (1)
    • ►  aug. (4)
  • ►  2011 (39)
    • ►  nov. (2)
    • ►  okt. (5)
    • ►  sep. (2)
    • ►  aug. (4)
    • ►  juli (2)
    • ►  juni (5)
    • ►  mai (4)
    • ►  apr. (3)
    • ►  mars (4)
    • ►  feb. (5)
    • ►  jan. (3)
  • ►  2010 (37)
    • ►  des. (3)
    • ►  nov. (3)
    • ►  okt. (4)
    • ►  sep. (8)
    • ►  aug. (3)
    • ►  juli (3)
    • ►  juni (2)
    • ►  mai (2)
    • ►  apr. (3)
    • ►  mars (3)
    • ►  feb. (2)
    • ►  jan. (1)
  • ▼  2009 (54)
    • ►  des. (3)
    • ►  nov. (2)
    • ►  okt. (3)
    • ►  sep. (5)
    • ►  aug. (4)
    • ►  juli (15)
    • ►  juni (8)
    • ►  mai (3)
    • ►  apr. (2)
    • ▼  feb. (5)
      • Fast exploratory tests with IFrames
      • TotT: Partial Mocks using Forwarding Objects
      • Constructor Injection vs. Setter Injection
      • To Assert or Not To Assert
      • TotT: Be an MVP of GUI Testing
    • ►  jan. (4)
  • ►  2008 (75)
    • ►  des. (6)
    • ►  nov. (8)
    • ►  okt. (9)
    • ►  sep. (8)
    • ►  aug. (9)
    • ►  juli (9)
    • ►  juni (6)
    • ►  mai (6)
    • ►  apr. (4)
    • ►  mars (4)
    • ►  feb. (4)
    • ►  jan. (2)
  • ►  2007 (41)
    • ►  okt. (6)
    • ►  sep. (5)
    • ►  aug. (3)
    • ►  juli (2)
    • ►  juni (2)
    • ►  mai (2)
    • ►  apr. (7)
    • ►  mars (5)
    • ►  feb. (5)
    • ►  jan. (4)

Feed

  • Google
  • Privacy
  • Terms