c# - How to write an integration test in NUnit? -
we 2 students writing our bachelor thesis , have developed windows application, should able aid restaurant in various communication processes. fundamentally, should able present information order moment guest send it served.
we have omitted test during development have decided write unit tests now. nevertheless, have found out suitable test can write our system integration tests because methods in our classes bound sql stored procedures via linq sql. aware of usage of stubs fake out dependency database, when our database implemented functions, figured give more value test several methods integration test.
as seen in code below have tried follow guide lines unit test, right way write integration test?
[test] public void sendtotalorder_sendallitemstoproducer_onesentorder() { //arrange order order = new order(); guest guest = new guest(1, order); producer producer = new producer("thomas", "guldborg", "beverage producer"); datagridview datagridview = new datagridview { bindingcontext = new bindingcontext() }; order.menuitemid = 1; order.quantity = 1; //act guest.additem(); datagridview.datasource = guest.sendorderoverview(); guest.sendorder(datagridview); datagridview.datasource = producer.orderoverview(); var guesttableorder = producer.orderoverview() .where(orders => orders.gtid == guest.guesttableid) .select(producerorder => producerorder.gtid) .single(); //assert assert.that(guesttableorder, is.equalto(guest.guesttableid)); }
yes, speaking, how write unit test/integration test. observe important guidelines:
- distinct act-arrange-assert steps
- the test name describes these steps (maybe should have "shouldsendoneorder" @ end, "should" commonly used describe assert).
- one assert per test.
i assume obey other guidelines:
- tests independent: don't change persistent state, don't influence other tests.
- test realistic use cases: don't arrange constellations violate business logic, don't impossible acts. or: mimic real application.
however, see things raise eyebrows.
it's not clear which act test. think "acts" belong arrange step.
a method
producer.orderoverview()
makes me suspect domain objects execute database interaction. if so, violate persistence ignorance. think there should service presents method (but see below).it's not clear why
datagridview.datasource = producer.orderoverview();
necessary test. if is, aggravates serious point:business logic , ui entangled!!
- method
guest.sendorderoverview()
,producer.orderoverview()
smelly: why should domain object know how present content? that's presenter (mvp) or controller (mvc) or view model (mvvm) should responsible for. - a method
guest.sendorder(datagridview)
evil. ties domain layer ui framework. fixed dependency evil enough, of course need values grid view inside method. business logic needs intimate knowledge of ui component. violates tell - don't ask principle.guest.sendorder
should have simple parameters tell how task , domain shouldn't have any reference any ui framework.
- method
you should address latter point. make goal run test without interaction dgv.
Comments
Post a Comment