In unit-tests, you mock out external dependencies. With Mock framework, you can verify that a correct value is passed into the dependency. Today, I had a case that a dictionary object is passed into the dictionary. I wasn't sure how to verify that the value is correct, as what I wanted was just to check the dictionary has two keys and those keys have correct values.

Simply, I learned I can use Moq.It.Is...

The code is like this. It uses Moq and Machine.Specification.

[sourcecode language="csharp"]
public class When_you_verify_the_dictionary_has_certain_keys_and_values
{
static Mock<IConsume> _consumer;
static ConsumerUser _consumerUser;
static string _username;
static string _password;

Establish context = () =>
{
_username = "Dorothy";
_password = "Perkins";
_consumer = new Mock<IConsume>();
_consumerUser = new ConsumerUser(_consumer.Object);
};

Because it_consumes = () => _consumerUser.Consume(_username, _password);

It should_have_username_and_password_in_the_input = () =>
_consumer.Verify(d =>d.Consume(Moq.It.Is<Dictionary<string, string>>(
dict => dict["username"] == "Dorothy" &&
dict["password"] == "Perkins")));
}}

public interface IConsume
{
void Consume(Dictionary<string, string> input);
}

public class ConsumerUser
{
private readonly IConsume _consume;

public ConsumerUser(IConsume consume)
{
_consume = consume;
}

public void Consume(string username, string password)
{
var pairs = new Dictionary<string, string>();
pairs.Add("username", username);
pairs.Add("password", password);

_consume.Consume(pairs);
}
}

[/sourcecode]

The above code is in github. https://github.com/andrewchaa/CodeExamples/blob/master/MoqExamples/VerifyDictionaryKeyAndValue.cs


Andrew Chaa

another day, another PR