Claiming ABAPUnit – Again. Part 2: More tests, some thoughts and Adt is awsome!
Part one of this series is here: https://blogs.sap.com/2021/12/05/claiming-abapunit-again.-a-walktrough-part-1/
(Maybe you note the change of users – yeah, I currently have 4 to my name… that’s a different story, and I would like to tell it, but not now)
It’s new week, and I’m back into coding.
I also keep working on unit tests.
I have a new filter method, so I’ll just do with it what I did with the others:
METHOD test3_consignment_stock_filter. "given: build the test data table: APPEND line_3_with_stock_usage_c TO mt_stock_mon. *Filter should delete it: "when cut->filter_data_consignment_stock( CHANGING ct_stock_mon = mt_stock_mon ). "then Table should be empty: cl_abap_unit_assert=>assert_initial( act = mt_stock_mon ). ENDMETHOD.
I also remembered that wenn I add stuff to mt_stock_mon in a test, that line might still be there in another test.
So I could clear it 1st thing in every test.
Or I do that in the setup(): (I need do check: setup is executed once before every single test, right?)
METHOD setup. "given cut = NEW zclewm_stasam_interface( iv_lgnum = '1020' ). line_1_with_qdocid_filled = VALUE #( matnr = '0815' qdocid = '478326423648' ). line_2_with_emtyp_qdocid = VALUE #( matnr = '0815' qdocid = space ). line_3_with_stock_usage_c = VALUE #( matnr = '0815' qdocid = space stock_usage = me->MC_consignment_Stock ). clear me->mt_stock_mon. "always start fresh and new - we want no side effects! ENDMETHOD.
Theres also a question on test philosophy here, where I would be happy to get your thoughts:
I’m creating my (small) test data table mt_stock_mon with every test method.
Another approach would be:
Create a (big) test date table in setup, one the covers every aspect. And is expanded when needed, whenever another test is added. -> run all tests on this big table.
What are ABAPUnit practitioners thoughts on those approaches?
Side note: I try to give meaningful (and also sortable / grouping names). For that, I think I need some words, lots of characters.
The 30 I have available for methods is not that much. So I’m thinking about where to save:
Maybe, instead of naming methods test1_ test2_ etc. I could go for just t1_, t2_ ?
Maybe even dropping the _ ?
(I would like to also drop the T [big kudos to whoever recognizes a South Park reference in that?!], but methods can’t start with a number. )
Next thing: this might be obvious, but maybe not:
Pleas note, how little typing I have to do, when creating a similar, but different test:
My test4 on consignment stock is very similar to test2 on QDOCID, so what I do is this:
– Highlight them complete method test2_
– ctrl+alt+down to copy it
– alt+down(+down+down+down…) to move it, well, down, to after test_3
– change the methods name to test4_
– ctrl+1 (QuickFix) to habe the definition for testing generated.
– change what line I want to append ( type: line_4 press: ctrl+space and hit enter to complete.
– change the methods I’m testing (delete the part after filter_ then again press: ctrl+space and hit enter to complete.)
– Last step: Ctrl + Shift + F10 to make it run / watch it fail(*)!
*Yes, I do remember the TDD cycle:
1. Write a test
2. watch it fail
3. write code, so it passes.
4. watch it pass
5. Choose any one of those: write next test / refactor code / refactor tests.
And with that I’ll leave it for today!