Archive of

English Learning Memo 1

My boss sent a message in our office channel, which said she was WFH today, as "she have a bloke coming round to fix the garage door".

BLOKE is a new word to me. so I learned this word today.

Other learnings

  • "得不偿失" in English can be translated as "not worth the loss" or "the gains do not justify the losses."
  • "蒜苔" in English is "garlic scape" or simply "garlic shoots."
  • "In and out promotion" 广告术语中指的是一种快速进行的促销活动,通常是短期的、迅速产生效果的宣传推广。这可能包括限时折扣、特价促销等手段,旨在迅速吸引顾客。
  • Every so often it'd rain. “Every so often"是固定搭配,表示“偶尔”或者“时不时的”。
  • My brother loved playing tag. 这句里的 tag 指的是一种游戏,即“追逐游戏”。通常几个人一起玩,其中一个人被标记 (tag)为追逐者,其他人则努力躲避追击者,避免被他/她触及到。

…more

Moq tips 1 - learn how to write unit tests from ChatGPT

When should I use mockObject.Reset() and when should I use mockObject.Invocations.Clear()?

In the context of using a mocking framework like Moq in C# for unit testing, the choice between mockObject.Reset() and mockObject.Invocations.Clear() depends on what you want to achieve.

  1. mockObject.Reset():

    • This is specific to the Moq library.
    • It resets the mock object, removing any setups or custom behavior you might have defined for that mock.
    • It does not clear recorded invocations; you can still access them after calling Reset().

    Example:

    var mock = new Mock<MyClass>();
    mock.Setup(x => x.MyMethod()).Returns("Original");
    
    // ... code using the mock ...
    
    // Reset the mock, removing setups
    mock.Reset();
    
    // Now, if you call the method, it won't use the previous setup
    var result = mock.Object.MyMethod();
    
  2. mockObject.Invocations.Clear():

    • This clears the recorded invocations on the mock object.
    • It doesn't affect setups or custom behavior. It just removes the history of invocations.
    • This can be useful when you want to verify interactions or check the number of invocations without interference from previous test runs.

    Example:

   var mock = new Mock<MyClass>();
   mock.Setup(x => x.MyMethod()).Returns("Original");
   
   // ... code using the mock ...
   
   // Clear recorded invocations
   mock.Invocations.Clear();
   
   // Now, if you verify invocations, it won't consider previous calls
   mock.Verify(x => x.MyMethod(), Times.Never());

In summary:

  • Use mockObject.Reset() when you want to clear setups and start fresh with the mock.
  • Use mockObject.Invocations.Clear() when you want to clear the history of invocations, but keep the existing setups and behaviors.

If I set up a method with the same parameters multiple times, the last setup will take effect, right?

In most mocking frameworks, including Moq for C#, the answer is YES. Each new setup for the same method and parameters overrides any previous setups.

Here's an example using Moq:


// Setting up the method with the same parameters but different returns
mock.Setup(x => x.MyMethod()).Returns("FirstSetup");
mock.Setup(x => x.MyMethod()).Returns("SecondSetup");

// Now, if you call the method, it will return "SecondSetup"
var result = mock.Object.MyMethod();