Skip to content

Instantly share code, notes, and snippets.

@Flayed
Flayed / MyObject.cs
Created January 31, 2018 16:57
My Fail Object
public class MyObject
{
// Read Only -- must initialize in constructor!
public string Id { get; }
public double Count { get; }
public MyObject(string id, double count)
{
Id = id;
Count = count;
@Flayed
Flayed / MyController.cs
Created January 31, 2018 16:55
Http Route
[HttpPost("upload/{id}")]
public async Task<IActionResult> Upload(string id, [FromBody]MyObject myObject)
{
if (await _myService.Upload(myObject))
{
return NoContent();
}
return BadRequest();
}
@Flayed
Flayed / MyUnitTests.cs
Created January 11, 2018 21:18
Sequencer usage
[Fact(DisplayName = "Sequencer can do callbacks in sequence")]
public void Sequencer_CallbacksInSequence()
{
int expectedFirst = 5;
int expectedSecond = 10;
bool wasCallbackIssued = false;
var myMock = new Mock<IMyInterface>();
myMock.Setup(m => m.CoolNumber()).Sequence(Sequencer.New,
() => { return expectedFirst; },
@Flayed
Flayed / MoqExtensions.cs
Last active January 11, 2018 21:17
Moq extension for sequenced callbacks
public class Sequencer
{
public int Sequence { get; private set; } = 0;
public int NextSequence => Sequence++;
public static Sequencer New => new Sequencer();
}
public static class MoqExtensions
{
@Flayed
Flayed / MyUnitTests.cs
Created January 11, 2018 20:57
Moq setup issues callback
[Fact(DisplayName = "Setup can issue a callback")]
public void Setup_IssuesCallback()
{
bool wasCallbackIssued = false;
var myMock = new Mock<IMyInterface>();
myMock.Setup(m => m.CoolNumber()).Callback(() =>
{
wasCallbackIssued = true;
});
@Flayed
Flayed / MyUnitTests.cs
Created January 11, 2018 20:57
Moq setup returns Func
[Fact(DisplayName = "Setup can return a Func<T>")]
public void Setup_ReturnsFunc()
{
int expected = 42;
var myMock = new Mock<IMyInterface>();
myMock.Setup(m => m.CoolNumber()).Returns(() =>
{
// Do some fancy calculation...
return expected;
@Flayed
Flayed / MyUnitTests.cs
Created January 11, 2018 20:56
Moq Setup returns object
[Fact(DisplayName = "Setup can return an object directly")]
public void Setup_ReturnsObject()
{
int expected = 42;
var myMock = new Mock<IMyInterface>();
myMock.Setup(m => m.CoolNumber()).Returns(expected);
int actual = myMock.Object.CoolNumber();
@Flayed
Flayed / MyUnitTests.cs
Last active January 11, 2018 20:44
Moq SetupSequence
using FluentAssertions;
using Moq;
using System;
using System.Threading.Tasks;
using Xunit;
namespace MyUnitTestProject
{
public interface IMyInterface
{
@Flayed
Flayed / ClientService.cs
Created January 10, 2018 20:59
TcpClient factory
using Flayed.Communication.Clients.Impl;
using Flayed.Communication.Clients;
namespace Flayed.Communication.Services
{
public class ClientService : IClientService
{
/// <summary>
/// Creates an <see cref="ITcpClient"/> client
/// </summary>
@Flayed
Flayed / TcpClient.cs
Created January 10, 2018 20:49
TcpClient implementation
public class TcpClient : ITcpClient
{
// The real implementation
private readonly System.Net.Sockets.TcpClient _client;
public EndPoint RemoteEndPoint => _client.Client.RemoteEndPoint;
public Stream GetStream() => _client.GetStream();
public TcpClient()
{
_client = new System.Net.Sockets.TcpClient();