Проблемы с запуском демоверсии (Nunit и ReSharper) - PullRequest
0 голосов
/ 20 января 2010

Я пытаюсь справиться с насмешками и ReSharper, наблюдая за этой демонстрацией http://www.bestechvideos.com/2008/06/08/dimecasts-net-introduction-to-mocking-with-moq Я уверен, что правильно следовал коду, но получаю ошибки. Не могли бы вы дать мне несколько советов о том, что я иду не так?

ошибки: имя класса недопустимо на данный момент ошибки: -отправка электронной почты не реализована

using System;
using System.Collections.Generic; // for the Dictionary
using NUnit.Framework;
using Moq;


namespace MvcUnitTst2.Tests
{
[TestFixture]
public class IntoToMoq
{
    [Test]
    public void NonMock()
    {

        var emailService = new EmailService();
        var emailer = new Emailer(emailService);
        emailer.SendBatchEmails();

    }
}

public class Emailer
{
    public Emailer(IEmailService emailService)
    {
        // error here:- class name is not valid at this point
        MvcUnitTst2.Tests.EmailService = emailService;
    }
    public void SendBatchEmails()
    {
        // build a list of emails
        // code below fails
        //Dictionary<string, string> emails = new Dictionary<string, string>
        //                                        {
        //                                            {"fred1@foo.com","Hello 1"},
        //                                            {"fred2@foo.com","Hello 2"},
        //                                            {"fred3@foo.com","Hello 3"},
        //                                            {"fred4@foo.com","Hello 4"}
        //                                        };

        // use this instead
        var emails = new Dictionary<string, string>
                                                {
                                                    {"fred1@foo.com","Hello 1"},
                                                    {"fred2@foo.com","Hello 2"},
                                                    {"fred3@foo.com","Hello 3"},
                                                    {"fred4@foo.com","Hello 4"}
                                                };                                       



        foreach (KeyValuePair<string, string> email in emails)
        {
            if(!MvcUnitTst2.Tests.EmailService.SendEmail(email.Key,email.Value))
            {
                throw new Exception("Some message here");

            }
        }

    }



    private IEmailService EmailService { get; set; }
}


// the error is here:- send email is not implemented
    public class EmailService: IEmailService
    {
        public static bool SendEmail(string emailAddress,string message)
        {
            return false;
        }
    }

public interface IEmailService
{
    bool SendEmail(string emailAddress, string message);
}

}

1 Ответ

2 голосов
/ 20 января 2010

У вас есть класс, реализующий интерфейс IEmailService, но SendEmail помечен как статический.

Почему c # не позволяет статическим методам реализовать интерфейс

Кроме того, здесь вы пытаетесь присвоить экземпляр классу.

// error here:- class name is not valid at this point
MvcUnitTst2.Tests.EmailService = emailService;

Вот исправленный код для этих проблем:

using System;
using System.Collections.Generic; // for the Dictionary
using NUnit.Framework;
using Moq;


namespace MvcUnitTst2.Tests
{
[TestFixture]
public class IntoToMoq
{
    [Test]
    public void NonMock()
    {

        var emailService = new EmailService();
        var emailer = new Emailer(emailService);
        emailer.SendBatchEmails();

    }
}

public class Emailer
{
    public Emailer(IEmailService emailService)
    {
        this.EmailService = emailService;
    }
    public void SendBatchEmails()
    {
        // build a list of emails
        // code below fails
        //Dictionary<string, string> emails = new Dictionary<string, string>
        //                                        {
        //                                            {"fred1@foo.com","Hello 1"},
        //                                            {"fred2@foo.com","Hello 2"},
        //                                            {"fred3@foo.com","Hello 3"},
        //                                            {"fred4@foo.com","Hello 4"}
        //                                        };

        // use this instead
        var emails = new Dictionary<string, string>
                                                {
                                                    {"fred1@foo.com","Hello 1"},
                                                    {"fred2@foo.com","Hello 2"},
                                                    {"fred3@foo.com","Hello 3"},
                                                    {"fred4@foo.com","Hello 4"}
                                                };                                       



        foreach (KeyValuePair<string, string> email in emails)
        {
            if(!this.EmailService.SendEmail(email.Key,email.Value))
            {
                throw new Exception("Some message here");

            }
        }

    }



    private IEmailService EmailService { get; set; }
}


    public class EmailService: IEmailService
    {
        public bool SendEmail(string emailAddress,string message)
        {
            return false;
        }
    }

public interface IEmailService
{
    bool SendEmail(string emailAddress, string message);
}
...