C# – Add or overwrite a value in ConcurrentDictionary

The simplest way to add or overwrite a value in a ConcurrentDictionary is to use the indexer: If the key doesn’t exist, this adds it. If the key exists, this overwrites it. The indexer is thread-safe. The indexer is the simplest way to unconditionally add / overwrite a value. Sometimes you’ll want to use other … Read more

C# – Convert a list to a dictionary

The simplest way to convert a list to a dictionary is to use the Linq ToDictionary() method: This loops through the list and uses the key/element selector lambdas you passed in to build the dictionary. In this article, I’ll go into details about how to use ToDictionary() and show how to deal with duplicate keys. … Read more

C# – Unit testing code that does File IO

If your code does File IO, such as reading text from a file, then it’s dependent on the file system. This is an external dependency. In order to make the unit tests fast and reliable, you can mock out the external dependencies. To mock out the file system dependency, you can wrap the File IO … Read more

C# – Select distinct objects based on a property

There are three ways to select distinct objects based on a property using Linq: These select one movie per year: GroupBy() is the simplest because it doesn’t require any additional code. Distinct() is faster but it’s more complicated. DistinctBy() is the fastest and simplest, but requires the most code (it requires .NET 6 or getting … Read more

Quick way to create a unit test project in Visual Studio

You don’t need to manually create a unit test project (through the UI or through the command line). Instead, you can can use the Create Unit Tests command in Visual Studio to generate a unit test project, add it to the solution, and wire up a test stub all at once. Note: This approach can … Read more

Moq – Verifying parameters passed to a mocked method

When you need to verify that the code under test called a method with the expected parameters, you can mock the method with Moq and use Verify() + It.Is<T>() to check the parameters passed in. Verify() asserts that the method call happened as expected with the specified parameters. Here’s an example. This is verifying that … Read more

Moq – How to use Callback() to capture parameters passed to mocked methods

When you’re using Moq to set up a mocked method, you can use Callback() to capture the parameters passed into the mocked method: There are two main use cases for capturing parameters in a test: Logging method calls for troubleshooting. Simplifying assertions involving complex parameters. In this article, I’ll show examples of using Callback() in … Read more

Error CS0854 when you’re using Moq with optional parameters

Problem Optional parameters aren’t optional when you’re using Moq. When you’re setting up or verifying a method call on a mock object, and the method has an optional parameter that you didn’t specify a value for, you’ll get the following compiler error: Error CS0854 – An expression tree may not contain a call or invocation … Read more

Algorithm Explained: Get the max items you can purchase with a fixed budget

Problem statement: Given a fixed budget and a list of item prices. What is the max number of items you can purchase? You can only buy each item once. Note: This is the Mark and Toys problem from HackerRank. Example: You’re given $10 and a list of items to choose from: A cool coffee cup … Read more

C# – Circuit breaker with Polly

In an electrical system, a circuit breaker detects electrical problems and opens the circuit, which blocks electricity from flowing. To get electricity flowing again, you have to close the circuit. The same approach can be implemented in software when you’re sending requests to an external service. This is especially important when you’re sending lots of … Read more