我有一个测试方法,它建立一个具有特定模式的 DataTable 以在测试期间使用。如果我内联构建 DataTable 的代码,那么测试在调试模式下运行就好了。如果我将它封装在一个函数中,它会在调试模式下运行测试时抛出一个 AccessViolationException。在发布模式下运行时,它成功而没有问题。我已经包含了下面的代码。我尝试设置一些编译器开关和测试环境设置,认为它们是原因,但它们没有效果。我正在使用 MSTest 和 VS 2012 RC。测试项目是 .NET 4.5
[TestMethod]
public void PkColumnSortedToTopWhenColumnMappingIsExisting()
{
// arrange
var sourceMart = new TableMap();
//var schema = new DataTable();
var schema = GetDataBaseSchemaTable();
schema.Rows.Add("Column1", 1, 2, 3, 4, true, /* isKey: */ false, true, "BaseColumn1", "BaseTable1", typeof(int), 24, true, false,
false, false, false);
schema.Rows.Add("Column2", 1, 2, 3, 4, true, /* isKey: */ false, true, "BaseColumn2", "BaseTable1", typeof(int), 24, true, false,
false, false, false);
var columnMapping1 = new ColumnMapping(schema.Rows[0], DatabaseType.MicrosoftSql);
var columnMapping2 = new ColumnMapping(schema.Rows[1], DatabaseType.MicrosoftSql);
sourceMart.Mappings.Add(columnMapping1);
sourceMart.Mappings.Add(columnMapping2);
var viewModel = new MappingViewModel(sourceMart);
// Navigate to next page (first time building mappings)
viewModel.Activate();
// Set second column to be a PK
sourceMart.Mappings.First(m => m.SourceColumnName == "Column2").IsDestinationColumnPartOfPrimaryKey = true;
//Reactivate which simulates as if we navigated away and back which should resort it
viewModel.Activate();
// assert
Assert.IsTrue(viewModel.ColumnMappingVMs.First().ColumnMapping.IsDestinationColumnPartOfPrimaryKey);
}
public DataTable GetDataBaseSchemaTable()
{
var schemaTable = new DataTable();
schemaTable.Columns.Add(new DataColumn("ColumnName", typeof(string)));
schemaTable.Columns.Add(new DataColumn("ColumnOrdinal", typeof(int)));
schemaTable.Columns.Add(new DataColumn("ColumnSize", typeof(int)));
schemaTable.Columns.Add(new DataColumn("SourceNumericPrecision", typeof(short)));
schemaTable.Columns.Add(new DataColumn("SourceNumericScale", typeof(short)));
schemaTable.Columns.Add(new DataColumn("IsUnique", typeof(bool)));
schemaTable.Columns.Add(new DataColumn("IsKey", typeof(bool)));
schemaTable.Columns.Add(new DataColumn("IsRowID", typeof(bool)));
schemaTable.Columns.Add(new DataColumn("BaseColumnName", typeof(string)));
schemaTable.Columns.Add(new DataColumn("BaseTableName", typeof(string)));
schemaTable.Columns.Add(new DataColumn("DataType", typeof(Type)));
schemaTable.Columns.Add(new DataColumn("ProviderType", typeof(int)));
schemaTable.Columns.Add(new DataColumn("AllowDBNull", typeof(bool)));
schemaTable.Columns.Add(new DataColumn("IsAliased", typeof(bool)));
schemaTable.Columns.Add(new DataColumn("IsExpression", typeof(bool)));
schemaTable.Columns.Add(new DataColumn("IsHidden", typeof(bool)));
schemaTable.Columns.Add(new DataColumn("IsReadOnly", typeof(bool)));
schemaTable.Columns.Add(new DataColumn("IsLong", typeof(bool)));
return schemaTable;
}