MinLength/Range 数据注释在 NUnit 测试中不起作用
MinLength/Range Data Annotation does not work in NUnit test
如果我在模型中使用 MinLen 和 Range class,测试不会抛出我预期的异常。
MaxLength 按预期工作。
我使用其他数据库作为 sqlite、sqlserver 时也有相同的行为。
[TestFixture]
public class PostgreSqlRangeFixture
{
[Test]
public void TestRange_MustThrow()
{
using (var ctx = new LocalDbContext()) {
ctx.Database.EnsureCreated();
User user = new User() { FirstName = "12", LastName = "too short", Age = -100 };
ctx.Users.Add(user);
ctx.SaveChanges();
}
}
}
public class LocalDbContext : DbContext
{
public DbSet<User> Users { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
base.OnConfiguring(optionsBuilder);
const string psw = "marcos";
string dbName = "test_" + DateTime.Now.ToString("yyyy.MM.dd-HH.mm.ss.fff");
var cs = $"Host=192.168.99.100;Username=postgres;Password={psw};Database={dbName}";
optionsBuilder.UseNpgsql(cs);
}
}
public class User
{
public int Id { get; set; }
[Required]
[MaxLength(2)]
public string FirstName { get; set; }
[Required]
[MinLength(20)]
public string LastName { get; set; }
[Required]
[Range(0,150)]
public int Age { get; set; }
}
EF Core 仅使用这些命名空间提供的部分属性:
System.ComponentModel.DataAnnotations.Schema
System.ComponentModel.DataAnnotations
似乎只有 Required 和 MaxLength 应该适用于您的情况。检查这个 -> EF Core Annotations
其余属性可用于 ASP.NET Core API 的模型验证 --> Click
如果我在模型中使用 MinLen 和 Range class,测试不会抛出我预期的异常。
MaxLength 按预期工作。
我使用其他数据库作为 sqlite、sqlserver 时也有相同的行为。
[TestFixture]
public class PostgreSqlRangeFixture
{
[Test]
public void TestRange_MustThrow()
{
using (var ctx = new LocalDbContext()) {
ctx.Database.EnsureCreated();
User user = new User() { FirstName = "12", LastName = "too short", Age = -100 };
ctx.Users.Add(user);
ctx.SaveChanges();
}
}
}
public class LocalDbContext : DbContext
{
public DbSet<User> Users { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
base.OnConfiguring(optionsBuilder);
const string psw = "marcos";
string dbName = "test_" + DateTime.Now.ToString("yyyy.MM.dd-HH.mm.ss.fff");
var cs = $"Host=192.168.99.100;Username=postgres;Password={psw};Database={dbName}";
optionsBuilder.UseNpgsql(cs);
}
}
public class User
{
public int Id { get; set; }
[Required]
[MaxLength(2)]
public string FirstName { get; set; }
[Required]
[MinLength(20)]
public string LastName { get; set; }
[Required]
[Range(0,150)]
public int Age { get; set; }
}
EF Core 仅使用这些命名空间提供的部分属性:
System.ComponentModel.DataAnnotations.Schema System.ComponentModel.DataAnnotations
似乎只有 Required 和 MaxLength 应该适用于您的情况。检查这个 -> EF Core Annotations
其余属性可用于 ASP.NET Core API 的模型验证 --> Click