• JackbyDev
    link
    English
    121 month ago

    Which of these do you prefer?

    A?

    @Test
      public void turnOnLoTempAlarmAtThreshold() throws Exception {
        wayTooCold();
        assertEquals(“HBchL”, hw.getState());
      }
    

    Or B?

    @Test
      public void turnOnLoTempAlarmAtThreashold() throws Exception {
        hw.setTemp(WAY_TOO_COLD);
        controller.tic();
        assertTrue(hw.heaterState());
        assertTrue(hw.blowerState());
        assertFalse(hw.coolerState());
        assertFalse(hw.hiTempAlarm());
        assertTrue(hw.loTempAlarm());
      }
    
    Uncle Bob's Clean Code suggests

    Option A

    • magic_lobster_party
      link
      fedilink
      111 month ago

      I almost pulled my hair out when I read that section. One is super obvious without any prior experience with the code. The other is an obscure abomination only he can understand. He’s obviously super proud of his abomination and thinks it’s a prime example of “clean code”.

      • JackbyDev
        link
        English
        81 month ago

        It’s also a good example of how being too dogmatic about function length can hide important details.

      • magic_lobster_party
        link
        fedilink
        51 month ago

        His idea is that it’s faster to read that short string once you learn how to read it. But then you need to learn how to read it.

        In my experience, every time I thought of something clever like this, I’ll almost always regret it a month later when I revisit the code.

      • JackbyDev
        link
        English
        41 month ago

        Ask “Clean” Coders I guess lmao. Beats me.

    • @RonSijmOP
      link
      -11 month ago

      I’ve started to prefer option A to be honest.

      In C# I’m using Verify - So I prefer to just use Verify(state); and compare the entire state against a json saved state, instead of manually verifying every individual property