我正在编写的集成测试有问题。我需要在测试结束时通过删除测试期间添加的 Outlook 中的类别(从可用类别列表中)来执行清理。我对“归档”类别执行以下操作:
using Microsoft.Office.Interop.Outlook;
var outlookApplication = new Application();
outlookApplication.Session.Categories.Remove("Filed");
这未能删除该类别,但并非始终如一。当我调试代码时它可以工作,但在我运行测试时却不行。
更新: 这是所有测试代码:
[TestFixture]
public class BootstrapperTest
{
private bool containsFiled;
private bool containsPending;
private Application outlookApplication = new Application();
[Test]
public void CanCreateFiledCategory()
{
var bootstrapper = new Bootstrapper();
bootstrapper.LoadCategoriesIntoOutlook(outlookApplication);
var filedCategoryFound = outlookApplication.Session.Categories.Cast<Category>().Any(category => category.Name == "Filed");
Assert.That(filedCategoryFound, Is.EqualTo(true));
}
[Test]
public void CanCreatePendingCategory()
{
var bootstrapper = new Bootstrapper();
bootstrapper.LoadCategoriesIntoOutlook(outlookApplication);
var pendingCategoryFound = outlookApplication.Session.Categories.Cast<Category>().Any(category => category.Name == "Pending");
Assert.That(pendingCategoryFound, Is.EqualTo(true));
}
[SetUp]
public void Setup()
{
containsFiled = DoesCategoryNameExist(outlookApplication.Session.Categories, "Filed");
containsPending = DoesCategoryNameExist(outlookApplication.Session.Categories, "Pending");
}
[TearDown]
public void TearDown()
{
RemoveAllCategoriesFromOutlook();
}
private bool DoesCategoryNameExist(Categories categoryList, string categoryName)
{
return categoryList.Cast<Category>().Any(category => category.Name == categoryName);
}
private void RemoveAllCategoriesFromOutlook()
{
var containsFiledNow = DoesCategoryNameExist(outlookApplication.Session.Categories, "Filed");
var containsPendingNow = DoesCategoryNameExist(outlookApplication.Session.Categories, "Pending");
if (!containsFiled && containsFiledNow) outlookApplication.Session.Categories.Remove("Filed");
if (!containsPending && containsPendingNow) outlookApplication.Session.Categories.Remove("Pending");
}
}
以及它正在测试的方法:
public void LoadCategoriesIntoOutlook(Application outlookApplication)
{
var categories = outlookApplication.Session.Categories;
var filedCategoryNameExists = DoesCategoryNameAlreadyExist(categories, FiledCategoryName);
var pendingCategoryNameExists = DoesCategoryNameAlreadyExist(categories, PendingCategoryName);
var filedCategoryColourIsUsed = IsCategoryColorAlreadyUsed(categories, FiledCategoryColor);
var pendingCategoryColourIsUsed = IsCategoryColorAlreadyUsed(categories, PendingCategoryColor);
if (!filedCategoryNameExists)
{
if (filedCategoryColourIsUsed)
{
var categoryToBeChangedToFiled =
categories.Cast<Category>()
.Where(category => category.Color == FiledCategoryColor)
.FirstOrDefault();
categoryToBeChangedToFiled.Name = FiledCategoryName;
}
else
{
categories.Add(FiledCategoryName, FiledCategoryColor);
}
}
if (!pendingCategoryNameExists)
{
if (pendingCategoryColourIsUsed)
{
var categoryToBeChangedToPending =
categories.Cast<Category>()
.Where(category => category.Color == PendingCategoryColor)
.FirstOrDefault();
categoryToBeChangedToPending.Name = PendingCategoryName;
}
else
{
categories.Add(PendingCategoryName, PendingCategoryColor);
}
}
}