Как проверить, если нажатие кнопки открывает новую форму с NUnitForms? - PullRequest
4 голосов
/ 18 июня 2009

Я новичок в C # и пытаюсь написать простой GUI Unit Test с NUnit и NUnitForms. Я хочу проверить, открывается ли нажатие на кнопку новой формы. У моего приложения есть две формы, основная форма (Form1) с кнопкой, которая открывает новую форму (пароль):

private void button2_Click(object sender, EventArgs e)
{
    Password pw = new Password();
    pw.Show();
}

Источник для моего теста выглядит следующим образом:

using NUnit.Framework;
using NUnit.Extensions.Forms;

namespace Foobar
{
    [TestFixture]
    public class Form1Test : NUnitFormTest
    {
        [Test]
        public void TestNewForm()
        {
            Form1 f1 = new Form1();
            f1.Show();

            ExpectModal("Enter Password", "CloseDialog");

            // Check if Button has the right Text
            ButtonTester bt = new ButtonTester("button2", f1);
            Assert.AreEqual("Load Game", bt.Text);

            bt.Click();
        }
        public void CloseDialog()
        {
            ButtonTester btnClose = new ButtonTester("button2");
            btnClose.Click();
        }
    }
}

Выход NUnit:

  NUnit.Extensions.Forms.FormsTestAssertionException : expected 1 invocations of modal, but was invoked 0 times (Form Caption = Enter Password)

Проверка текста кнопки прошла успешно. Проблема заключается в методе ExpectModal . Я также попробовал это с названием формы, но безуспешно.

Кто-нибудь знает, что может быть не так?

Ответы [ 2 ]

2 голосов
/ 27 июня 2009

Я понял это сам. Существует два способа отображения Windows Forms:

  • Модальный : «Модальная форма или диалоговое окно должны быть закрыты или скрыты, прежде чем вы сможете продолжить работу с остальной частью приложения»
  • Без режима : "... позволяет перемещать фокус между формой и другой формой без необходимости закрывать исходную форму. Пользователь может продолжать работать в любом месте любого приложения, пока отображается форма. «

Немодальные окна открываются с помощью метода Show (), а модальные - с помощью ShowDialog (). NUnitForms может отслеживать только модальные диалоги (поэтому метод также называется «ExpectModal»).

Я изменил каждое "Show ()" на "ShowDialog ()" в моем исходном коде, и NUnitForms работали нормально.

0 голосов
/ 28 марта 2011

Я бы изменил ваш исходный код на использование ShowDialog (), только если вы хотите, чтобы ваши формы действительно открывались как модальные диалоги.

Вы правы в том, что NUnitForms поддерживает "Expect Modal", но не имеет "Expect Немодальный". Вы можете реализовать это самостоятельно с помощью класса FormTester. FormTester - это класс расширения, доступный в последнем репозитории для NUnitForms. Вы передаете строку свойства .Name формы, которую вы проверяете, чтобы увидеть, отображается ли она.

    public static bool IsFormVisible(string formName)
    {
        var tester = new FormTester(formName);
        var form = (Form) tester.TheObject;
        return form.Visible;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...