Commit e72cc784 authored by Savorboard's avatar Savorboard

add unit tests.

parent c1db4267
using System;
using System.Collections.Generic;
using System.Text;
using Xunit;
namespace DotNetCore.CAP.EntityFrameworkCore.Test
{
public class CapMessageStoreTest
{
}
}
\ No newline at end of file
using System;
using System.Data.SqlClient;
namespace DotNetCore.CAP.EntityFrameworkCore.Test
namespace DotNetCore.CAP.SqlServer.Test
{
public static class ConnectionUtil
{
......
using System.Data;
using System.Threading.Tasks;
using System.Threading;
using Dapper;
using Microsoft.EntityFrameworkCore;
namespace DotNetCore.CAP.EntityFrameworkCore.Test
namespace DotNetCore.CAP.SqlServer.Test
{
//public abstract class DatabaseTestHost : TestHost
//{
// private static bool _sqlObjectInstalled;
public abstract class DatabaseTestHost : TestHost
{
private static bool _sqlObjectInstalled;
// protected override void PostBuildServices()
// {
// base.PostBuildServices();
// InitializeDatabase();
// }
protected override void PostBuildServices()
{
base.PostBuildServices();
InitializeDatabase();
}
// public override void Dispose()
// {
// DeleteAllData();
// base.Dispose();
// }
public override void Dispose()
{
DeleteAllData();
base.Dispose();
}
// private void InitializeDatabase()
// {
// if (!_sqlObjectInstalled)
// {
// using (CreateScope())
// {
// var context = GetService<TestDbContext>();
// context.Database.EnsureDeleted();
// context.Database.Migrate();
// _sqlObjectInstalled = true;
// }
// }
// }
private void InitializeDatabase()
{
if (!_sqlObjectInstalled)
{
using (CreateScope())
{
var storage = GetService<SqlServerStorage>();
var token = new CancellationTokenSource().Token;
storage.InitializeAsync(token).Wait();
_sqlObjectInstalled = true;
}
}
}
// private void DeleteAllData()
// {
// using (CreateScope())
// {
// var context = GetService<TestDbContext>();
private void DeleteAllData()
{
using (CreateScope())
{
var context = GetService<TestDbContext>();
// var commands = new[]
// {
// "DISABLE TRIGGER ALL ON ?",
// "ALTER TABLE ? NOCHECK CONSTRAINT ALL",
// "DELETE FROM ?",
// "ALTER TABLE ? CHECK CONSTRAINT ALL",
// "ENABLE TRIGGER ALL ON ?"
// };
// foreach (var command in commands)
// {
// context.Database.GetDbConnection().Execute(
// "sp_MSforeachtable",
// new {command1 = command},
// commandType: CommandType.StoredProcedure);
// }
// }
// }
//}
var commands = new[]
{
"DISABLE TRIGGER ALL ON ?",
"ALTER TABLE ? NOCHECK CONSTRAINT ALL",
"DELETE FROM ?",
"ALTER TABLE ? CHECK CONSTRAINT ALL",
"ENABLE TRIGGER ALL ON ?"
};
foreach (var command in commands)
{
context.Database.GetDbConnection().Execute(
"sp_MSforeachtable",
new { command1 = command },
commandType: CommandType.StoredProcedure);
}
}
}
}
}
\ No newline at end of file
using Microsoft.EntityFrameworkCore;
namespace DotNetCore.CAP.SqlServer.Test
{
public class TestDbContext : DbContext
{
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
var connectionString = ConnectionUtil.GetConnectionString();
optionsBuilder.UseSqlServer(connectionString);
}
}
}
\ No newline at end of file
......@@ -2,7 +2,7 @@ using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
namespace DotNetCore.CAP.EntityFrameworkCore.Test
namespace DotNetCore.CAP.SqlServer.Test
{
public abstract class TestHost : IDisposable
{
......@@ -28,8 +28,9 @@ namespace DotNetCore.CAP.EntityFrameworkCore.Test
services.AddLogging();
var connectionString = ConnectionUtil.GetConnectionString();
//services.AddSingleton(new SqlServerOptions { ConnectionString = connectionString });
//services.AddDbContext<TestDbContext>(options => options.UseSqlServer(connectionString));
services.AddSingleton(new SqlServerOptions { ConnectionString = connectionString });
services.AddSingleton<SqlServerStorage>();
services.AddDbContext<TestDbContext>(options => options.UseSqlServer(connectionString));
_services = services;
}
......
......@@ -8,17 +8,21 @@ namespace DotNetCore.CAP.Test
{
public class CapBuilderTest
{
[Fact]
public void CanCreateInstanceAndGetService()
{
var services = new ServiceCollection();
services.AddSingleton<ICapPublisher, MyProducerService>();
var builder = new CapBuilder(services);
Assert.NotNull(builder);
var count = builder.Services.Count;
Assert.Equal(1, count);
var provider = services.BuildServiceProvider();
var capPublisher = provider.GetService<ICapPublisher>();
Assert.NotNull(capPublisher);
}
[Fact]
......@@ -45,6 +49,16 @@ namespace DotNetCore.CAP.Test
Assert.NotNull(thingy);
}
[Fact]
public void CanResolveCapOptions()
{
var services = new ServiceCollection();
services.AddCap(x => { });
var builder = services.BuildServiceProvider();
var capOptions = builder.GetService<CapOptions>();
Assert.NotNull(capOptions);
}
private class MyProducerService : ICapPublisher
{
public Task PublishAsync(string topic, string content)
......
namespace CDotNetCore.CAPTest
{
public class ConsistencyOptionsTest
{
}
}
\ No newline at end of file
using System;
using System.Threading;
using System.Threading.Tasks;
using DotNetCore.CAP.Models;
namespace DotNetCore.CAP.Test
{
//public class NoopMessageStore : ICapMessageStore
//{
// public Task<OperateResult> ChangeReceivedMessageStateAsync(CapReceivedMessage message, string statusName,
// bool autoSaveChanges = true)
// {
// throw new NotImplementedException();
// }
// public Task<OperateResult> StoreSentMessageAsync(CapSentMessage message)
// {
// throw new NotImplementedException();
// }
//}
}
\ No newline at end of file
using System;
using DotNetCore.CAP.Infrastructure;
using DotNetCore.CAP.Models;
using DotNetCore.CAP.Processor.States;
using Moq;
using Xunit;
namespace DotNetCore.CAP.Test
{
public class StateChangerTest
{
[Fact]
public void ChangeState()
{
// Arrange
var fixture = Create();
var message = new CapPublishedMessage
{
StatusName = StatusName.Enqueued
};
var state = Mock.Of<IState>(s => s.Name == "s" && s.ExpiresAfter == null);
var mockTransaction = new Mock<IStorageTransaction>();
// Act
fixture.ChangeState(message, state, mockTransaction.Object);
// Assert
Assert.Equal(message.StatusName, "s");
Assert.Null(message.ExpiresAt);
Mock.Get(state).Verify(s => s.Apply(message, mockTransaction.Object), Times.Once);
mockTransaction.Verify(t => t.UpdateMessage(message), Times.Once);
mockTransaction.Verify(t => t.CommitAsync(), Times.Never);
}
[Fact]
public void ChangeState_ExpiresAfter()
{
// Arrange
var fixture = Create();
var message = new CapPublishedMessage
{
StatusName = StatusName.Enqueued
};
var state = Mock.Of<IState>(s => s.Name == "s" && s.ExpiresAfter == TimeSpan.FromHours(1));
var mockTransaction = new Mock<IStorageTransaction>();
// Act
fixture.ChangeState(message, state, mockTransaction.Object);
// Assert
Assert.Equal(message.StatusName, "s");
Assert.NotNull(message.ExpiresAt);
mockTransaction.Verify(t => t.UpdateMessage(message), Times.Once);
mockTransaction.Verify(t => t.CommitAsync(), Times.Never);
}
private StateChanger Create() => new StateChanger();
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment