Tag: mstest

数据驱动的MSTest:DataRow始终为空

我在使用Visual Studio数据驱动测试时遇到问题。 我试图将其解构为最简单的例子。 我正在使用Visual Studio 2012.我创建了一个新的unit testing项目。 我正在引用系统数据。 我的代码如下所示: namespace UnitTestProject1 { [TestClass] public class UnitTest1 { [DeploymentItem(@”OrderService.csv”)] [DataSource(“Microsoft.VisualStudio.TestTools.DataSource.CSV”, “OrderService.csv”, “OrderService#csv”, DataAccessMethod.Sequential)] [TestMethod] public void TestMethod1() { try { Debug.WriteLine(TestContext.DataRow[“ID”]); } catch (Exception ex) { Assert.Fail(); } } public TestContext TestContext { get; set; } } } 我有一个非常小的csv文件,我已将“构建选项”设置为“内容”和“始终复制”。 我在解决方案中添加了.testsettings文件,并设置了enable deployment,并添加了csv文件。 我有没有|DataDirectory|尝试过这个 ,有/没有指定完整路径(与Environment.CurrentDirectory相同的路径)。 为了以防万一,我尝试了“../”和“../../”的变体。 现在,csv位于项目根级别,与.cs测试代码文件相同。 我尝试过使用xml和csv的变体。 […]

强制ClassInitialize在读取testmethod数据之前执行

我在unit testing中评估属性后执行unit testing的classinitilalize方法时遇到问题。 这些测试使用[classinitialize]方法生成一个测试集,该测试集在xml文件中生成一组随机数据。 xml文件由具有[datasource]属性的unit testing使用。 精简版本看起来像这样: [ClassInitialize] public static void Initialize(TestContext context) { // Create xml output file var output = new XDocument(new XElement(“Rows”)); foreach (var Code in Codes) { if (output.Root != null) output.Root.Add(new XElement(“Row”, new XElement(“Code”, Code))); } output.Save(“TestData.xml”); } [DataSource(“Microsoft.VisualStudio.TestTools.DataSource.XML”, “|DataDirectory|\\TestData.xml”, “Row”, DataAccessMethod.Sequential)] [TestMethod] public void TestStuff() { var Code = […]

在系统测试中使用Selenium时,使用Thread.Sleep的替代方法是什么?

我有一个使用Selenium的TestMethod如下: [TestMethod] public void ShouldSendPasswordReminder() { // go to loginregister url _fireFoxWebDriver.Navigate().GoToUrl(UkPaBaseUrl + “loginregister.aspx”); Thread.Sleep(1000); // click the forgotten password _fireFoxWebDriver.FindElement(By.LinkText(“Forgotten your password?”)).Click(); Thread.Sleep(1000); // enter your email address _fireFoxWebDriver.FindElement(By.Id(“PasswordResetRequest1_PasswordResetRequest_Username”)) .SendKeys(“username.lastname@domain.com”); Thread.Sleep(1000); // click submit _fireFoxWebDriver.FindElement(By.Id(“PasswordResetRequest1_PasswordResetRequest_PasswordResetRequestSubmit”)).Click(); Thread.Sleep(5000); // assert Assert.IsTrue(_fireFoxWebDriver.Url.Contains(“ThankYou”)); } 正如你所看到的,我必须多次调用Thread.Sleep(因为页面可能需要一些时间来完成它由于javascript等所做的事情),因为Selenium似乎无法处理页面加载和延迟不同于WatiN。 这使代码相当丑陋而且不太可靠。 处理此类场景的更好方法是什么? 您是否也在测试中经常编写Thread.Sleep调用? 谢谢,

带有Specflow的DataSource属性,用于多个浏览器测试

我在C#中进行了一些web ui测试,这些测试是通过browserstack中的selenium执行的。 目前这些只是简单的单位ms测试,它们在不同的浏览器中执行。 我想将测试移植到specflow,但我真的不知道如何进行多个浏览器测试。 目前,要在多个浏览器中执行这些测试,我使用的是DataSource属性,它基本上为XML文件中的相同测试提供不同的输入 [TestMethod] [Ignore] [DeploymentItem(“JLL.Specs\\Browsers.xml”)] [DataSource(“Microsoft.VisualStudio.TestTools.DataSource.XML”, “|DataDirectory|\\Browsers.xml”, “Row”, DataAccessMethod.Sequential)] public void LoadHomePageAndFindSearchBox() { … } 问题是Specflow不支持DataSource属性。 任何的想法? 这是XML文件: Firefox 31.0 Windows 7 1280×1024 Chrome 36.0 Windows XP 1024×768 …

使用Visual Studiounit testingC#的命令行参数

我应该使用VSunit testing框架来确保所有代码都正常工作。 但是,我很难获得需要命令行参数的测试(因为命令行输入必须在运行时给出……并且unit testing没有真正的“运行时”)。 有没有办法用命令行参数输入运行我的unit testing? 我意识到这不是构建程序的理想方式,但遗憾的是我没有决定测试过程的工作原理。 我已经读过,我可以写一个批处理文件并将其包含在MStest / testcontainer文件夹中。 尽管如此,我必须清除一些冲击,以便这样做。 这些冲击包括: 1)我对批处理文件一无所知 2)我不知道MStest / testcontainer文件夹在哪里,如何访问它,它是如何工作的,甚至不知道如何向它添加文件(因为它似乎是隐藏的或不容易访问)。 3)我不知道我对批处理文件做了什么,即使它是在MStest / testcontainer文件夹中正确写入的。 我的测试甚至应该知道它在哪里,更不用说从中获取输入了? 总结一下:如何让VSunit testing接受命令行参数? 如果我必须使用批处理文件方法,我将非常感谢它向我解释,就像我是5.我道歉,如果我在这个主题上显得有些无助,但我找不到任何明确或有用的解释在这个特定的背景下,这些东西是如何运作的。 万分感谢。

AssemblyCleanup没有开火

我有一些方法用于初始化和清理我正在使用我的测试的数据库,但我的方法没有触发属性AssemblyInitialize和AssemblyCleanup。 有任何想法吗? [TestInitialize] public void Init() { LoadData(); } [AssemblyInitialize] public void AssemblyInit() { } public void LoadData(string testDataFileName = “TestData.xml”) { connectionString = ConfigurationManager.ConnectionStrings[“NDbUnit”].ConnectionString; mySqlDatabase = new NDbUnit.Core.SqlClient.SqlDbUnitTest(connectionString); mySqlDatabase.ReadXmlSchema(“DataSet.xsd”); mySqlDatabase.ReadXml(testDataFileName); mySqlDatabase.PerformDbOperation(NDbUnit.Core.DbOperationFlag.CleanInsertIdentity); dataSet = mySqlDatabase.CopyDataSet(); } [AssemblyCleanup] public void RemoveDatabases() { List databasesToDelete = new List(); ServerConnection serverConnection = new ServerConnection(new SqlConnection(connectionString)); Server server = […]

数据驱动的unit testing – CSV编码问题?

我有以下CSV文件,用于我的数据驱动unit testing: File;expected Resources.resx;default Resources.de.resx;de AttachmentDetail.ascx.it.resx;it SomeOtherFile.rm-CH.resx;rm-CH “文件”和“预期”是标题。 但是,如果我想在代码中得到“文件”列 TestContext.DataRow[“File”].ToString(); 我收到了错误 System.ArgumentException:列’File’不属于表.. 当我通过测试方法属性将CSV文件添加到现有测试用例时,似乎“文件”列在其名称前面有一些奇怪的符号,就像编码问题一样。 但是,如果我用记事本,Notepad ++甚至TextMate(在Mac上)打开CSV文件,我没有看到任何这样的迹象,我无法摆脱它们。 有人可以给我一个关于这个问题的建议吗?

Try..Catch块中的断言被捕获

刚刚遇到一些有趣的行为 – 被Catch块捕获的Assert 。 List consArray = new List(); try { Decimal d; Assert.IsTrue(Decimal.TryParse(item.Value, out d)); consArray.Add(d); } catch (Exception e) { Console.WriteLine(item.Value); Console.WriteLine(e); } 断言抛出AssertFailedException并将其catch 。 一直以为如果Assert失败,那么测试失败并且连续执行被中止。 但在那种情况下 – 测试继续进行。 如果以后没有发生任何错误 – 我得到绿色测试! 从理论上讲 – 这是正确的行为吗? 编辑:我明白这可能是.NET限制以及如何在MsTest中进行断言。 断言抛出exception。 因为catch – 捕获它所捕获的一切断言exception。 但理论上是正确的还是具体的MsTest?

如何在MSTest中处理currentDomain.UnhandledException

我尝试基于答案实现解决方案如何处理unit testing时在其他线程中引发的exception? ,但我仍然不明白在处理程序中要做什么。 我们假设我有一个测试: [TestMethod] void Test() { new Thread(() => { throw new Exception(); }).Start(); } 我有和所有测试的全局初始化: [AssemblyInitialize] public static void AssemblyInitialize(TestContext context) { AppDomain currentDomain = AppDomain.CurrentDomain; currentDomain.UnhandledException += currentDomain_UnhandledException; } static void currentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) { Exception ex = e.ExceptionObject as Exception; if (ex != null) Trace.WriteLine(ex); Assert.Fail(“Unhandled Exception in thread.”); […]

维护VS Test Project中unit testing方法之间的上下文

我想按顺序运行以下unit testing: 使用随机数创建新客户的名称,密码等。 检索刚刚创建的客户并断言其属性包含相同的随机数 在同一用户上调用ForgotPassword函数,使用相同的用户名随机数 如清楚所示,我需要生成一次随机数,并在3种测试方法中共享它。 我似乎找不到办法做到这一点。 我想过使用TestContext对象,但是为每个实例创建了它。 我尝试使用ClassInitialize()方法没有帮助,因为它是静态的,因此其他方法无法访问该数字。 知道如何实现我的目标吗?