浏览代码

add unit tests.

master
Savorboard 7 年前
父节点
当前提交
e72cc784e6
共有 9 个文件被更改,包括 143 次插入94 次删除
  1. +0
    -11
      test/DotNetCore.CAP.SqlServer.Test/CapMessageStoreTest.cs
  2. +1
    -1
      test/DotNetCore.CAP.SqlServer.Test/ConnectionUtil.cs
  3. +51
    -51
      test/DotNetCore.CAP.SqlServer.Test/DatabaseTestHost.cs
  4. +13
    -0
      test/DotNetCore.CAP.SqlServer.Test/TestDbContext.cs
  5. +4
    -3
      test/DotNetCore.CAP.SqlServer.Test/TestHost.cs
  6. +15
    -1
      test/DotNetCore.CAP.Test/CAP.BuilderTest.cs
  7. +0
    -6
      test/DotNetCore.CAP.Test/ConsistencyOptionsTest.cs
  8. +0
    -21
      test/DotNetCore.CAP.Test/NoopMessageStore.cs
  9. +59
    -0
      test/DotNetCore.CAP.Test/StateChangerTest.cs

+ 0
- 11
test/DotNetCore.CAP.SqlServer.Test/CapMessageStoreTest.cs 查看文件

@@ -1,11 +0,0 @@
using System;
using System.Collections.Generic;
using System.Text;
using Xunit;

namespace DotNetCore.CAP.EntityFrameworkCore.Test
{
public class CapMessageStoreTest
{
}
}

+ 1
- 1
test/DotNetCore.CAP.SqlServer.Test/ConnectionUtil.cs 查看文件

@@ -1,7 +1,7 @@
using System;
using System.Data.SqlClient;

namespace DotNetCore.CAP.EntityFrameworkCore.Test
namespace DotNetCore.CAP.SqlServer.Test
{
public static class ConnectionUtil
{


+ 51
- 51
test/DotNetCore.CAP.SqlServer.Test/DatabaseTestHost.cs 查看文件

@@ -1,62 +1,62 @@
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);
}
}
}
}
}

+ 13
- 0
test/DotNetCore.CAP.SqlServer.Test/TestDbContext.cs 查看文件

@@ -0,0 +1,13 @@
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);
}
}
}

+ 4
- 3
test/DotNetCore.CAP.SqlServer.Test/TestHost.cs 查看文件

@@ -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;
}


+ 15
- 1
test/DotNetCore.CAP.Test/CAP.BuilderTest.cs 查看文件

@@ -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)


+ 0
- 6
test/DotNetCore.CAP.Test/ConsistencyOptionsTest.cs 查看文件

@@ -1,6 +0,0 @@
namespace CDotNetCore.CAPTest
{
public class ConsistencyOptionsTest
{
}
}

+ 0
- 21
test/DotNetCore.CAP.Test/NoopMessageStore.cs 查看文件

@@ -1,21 +0,0 @@
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();
// }
//}
}

+ 59
- 0
test/DotNetCore.CAP.Test/StateChangerTest.cs 查看文件

@@ -0,0 +1,59 @@
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();
}
}

正在加载...
取消
保存