Cassandra mock
unknown
java
a year ago
2.5 kB
2
Indexable
Never
public class Customer { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } } public interface ICustomerRepository { Customer GetCustomer(int id); } public class CustomerRepository : ICustomerRepository { private readonly ISession session; public CustomerRepository(ISession session) { this.session = session; } public Customer GetCustomer(int id) { var statement = session.Prepare("SELECT * FROM Customers WHERE Id = ?"); var boundStatement = statement.Bind(id); var dbCustomers = session.Execute(boundStatement); foreach(var row in dbCustomers) { return Map(row); } return null; } private Customer Map(Row row) { return new Customer { Id = row.GetValue<int>("Id"), Name = row.GetValue<string>("Name"), Age = row.GetValue<int>("Age") }; } } private Mock<ISession> sessionMock; [SetUp] public void Setup() { sessionMock = new Mock<ISession>(); sessionMock.Setup(_ => _.Prepare(It.IsAny<string>())).Returns(new PreparedStatement()); } public static class RowSetHelper { public static RowSet CreateMockRowSet(params Row[] rows) { var mockList = new List<Row>(); mockList.AddRange(rows); var rowSet = new Mock<RowSet>(); rowSet.Setup(m => m.GetEnumerator()).Returns(mockList.GetEnumerator()); return rowSet.Object; } public static Mock<Row> CreateMockRow() { var rowMock = new Mock<Row>(); rowMock.Setup(m => m.GetValue<int>("Id")).Returns(1); rowMock.Setup(m => m.GetValue<int>("Age")).Returns(1); rowMock.Setup(m => m.Getvalue<string>("Name")).Returns("Test"); return rowMock; } } [Test] public void Repository_GeCustomer_ReturnsValidCustomer() { var dataRowMock = RowSetHelper.CreateMockRow(); sessionMock.Setup(m => m.Execute(It.IsAny<IStatement>())).Returns(RowSetHelper.CreateMockRowSet(dataRowMock.Object)); var repository = new CustomerRepository(_sessionMock.Object); var customer = repository.GetCustomer(1); customer.Should().NotBeNull("because get customer should return mock value from session."); customer.Id.Should().Be(1, "because repository has a customer with id 1"); }