quick code snippet to setup automoq



This is a quick start example of setup mock for Automoq. 


var mocker = new AutoMocker();
var creditCardValidator = mocker.CreateInstance<CreditCardValidator>();

mocker.GetMock<ICreditCardValidator>().Setup(x => x.Validate("fakecardnunber", new DateTime(2024, 12, 12))).Returns(new CreditCardValidationResult("", true));

var result = creditCardValidator.Validate("fakecardnunber", new DateTime(2024, 12, 12));
Assert.IsTrue(result.Valid);                    



There's also option to use other feature like for instance, your class takes a string as part of its constructor. Then you can make use of automoq's use method as shown below. Also notice we using ReturnAsync to work with async 

internal class Vechicle() : IVechicle
{
    public async Task<string> GetMadeModelAsync()
    {
        return await Task.FromResult("testtesttest");
    }
}

internal interface IVechicle
{
    Task<string> GetMadeModelAsync();
}

internal class User(string dummy, IVechicle _vechicle)
{
    public async Task<string> GetModel()
    {
        return await _vechicle.GetMadeModelAsync();
    }
}

// using returnAsync would be much better
[Test]
public async Task TestGetUser()
{
    var mocker = new AutoMocker();
    mocker.Use("toyota");
    var fakeUser = mocker.CreateInstance<User>();

    mocker.GetMock<IVechicle>().
    Setup(x => x.GetMadeModelAsync()).ReturnsAsync("testtesttest");

    var result = await fakeUser.GetModel();

    Assert.That(result, Is.Not.Null);
    Assert.AreEqual("others", result);

    Assert.Pass();
}







Comments

Popular posts from this blog

The specified initialization vector (IV) does not match the block size for this algorithm

NodeJS: Error: spawn EINVAL in window for node version 20.20 and 18.20