Необходимый: интерфейсы Файловой системы и реализация в.NET [дубликат]

Одной из основных проблем, которые вы затрагиваете, является назначение preloadImages[r] для new Image(), а не Array. Кроме того, вы определяете preloadImages как функцию и переменную (неявную глобальную) для использования в вашем двумерном Array. После переименования этих переменных и небольшой очистки ваш код работает нормально, как показано ниже:

document.addEventListener('DOMContentLoaded', function () {

    var queryData = [
        'https://makelin.us/100/100',
        'https://makelin.us/100/100',
        'https://makelin.us/100/100'
    ];
    var preloadImages = [];
    // First function to preload image slices into a two dimensional array.
    function preloadAllImages() {
        var row = 5;
        var col = 5;

        for (var r = 0; r < row; r++) {
            preloadImages[r] = [];
            for (var c = 0; c < col; c++) {
                preloadImages[r][c] = new Image();
                preloadImages[r][c].src = queryData[2];
            }
        }
        // console.log(preloadImages);
    }
    preloadAllImages();

    // Second function to retrieve and assemble image slices.
    function assembleImage() {
        var row = 5;
        var col = 5;
        var assembleImage = document.getElementById("prodImage");
        var imageTable = "<table>";

        for (var r = 0; r < row; r++) {
            imageTable += "<tr>";
            for (var c = 0; c < col; c++) {
                imageTable += "<td>";
                imageTable += "<img src=" + preloadImages[r][c].src + "/>";
                imageTable += "</td>";

                // console.log(preloadImages[r][c])
            }
            imageTable += "</tr>";
        }
        imageTable += "</table>";
        // console.log(imageTable);
        assembleImage.innerHTML = imageTable;
        // console.log(assembleImage);
    }
    assembleImage();
});
<!DOCTYPE html>
<html>

<head>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width">
	<title>repl.it</title>
	<link href="style.css" rel="stylesheet" type="text/css" />
</head>

<body>
	<div id="prodImage"></div>
	<script src="script.js">
	</script>
</body>

</html>

12
задан Community 23 May 2017 в 12:00
поделиться

5 ответов

Я записал адаптеры для помех System.IO.File и Directory методы. Затем в моих классах я делаю следующее:

public class MyService {
  public IFile File {private get;set;}
  public MyService() {
    File = new FileImpl();
  }
  public void DoSomething() {
    File.ReadAllText("somefile");
  }
}

Затем можно ввести насмешку как IFile для тестирования.

6
ответ дан 2 December 2019 в 20:41
поделиться

Хорошо, у меня нет ложной файловой системой библиотеки, которой Вы желаете для (хотя это может быть там где-нибудь и было бы прохладно), но это может помочь. Одно из интересных понятий, "бихевиористская" школа поблочного тестирования думала, придумало, идея "исходящего интерфейса". В некоторых случаях, кажется, существует столько же значения в принятии вызовов, которые объект выполняет ко всей вселенной вещей за пределами себя и превращению их в интерфейс, поскольку существует в типичном действии создания интерфейса для методов, внешний мир может обратиться к Вашему объекту).

В этом случае Вы могли бы рассмотреть, вместо того, чтобы дразнить целую файловую систему, делая один или несколько логически когерентных интерфейсов для ответов и обслуживаете свои объектные потребности от внешнего мира. Вызовы просто ответили бы на вопросы, в которых Вы нуждаетесь, ответил... не, диктуют реализацию. Затем можно использовать внедрение зависимости, как Вы упомянули для введения в реализации, Вы требуете для своих тестов. И Вы будете, вероятно, использовать Moq, чтобы сделать так, так как Вы знакомы с ним.

Так, Ваш "исходящий интерфейс" мог бы иметь метод под названием DoesFileExist (). Это могло бы принять путь. Или, если существует "высокоуровневый" бизнес-вопрос, Ваш объект пытается ответить и видит, существует ли файл, просто способ, которым на вопрос отвечают, затем Ваш исходящий интерфейс не мог бы иметь метода о существовании файла вообще. Это могло бы вместо этого быть что-то как "DoIAppearToHaveAccessToTheFileServer" или даже "IsThereAPreviouslySavedGame".

Это - некоторая работа, но могло бы быть более верно для принципов хорошего поблочного тестирования... позволяет Вашему объекту под тестом выразить то, что это пытается сделать и позволить Вашим модульным тестам протестировать его и только его. Просто мысль... надеется, что помогает.

5
ответ дан 2 December 2019 в 20:41
поделиться

Я понимаю, что пакет Typemock может сделать вещи как это.

0
ответ дан 2 December 2019 в 20:41
поделиться

Вместо того, чтобы дразнить интерфейс файловой системы, я традиционно решил бы дразнить саму Файловую систему. Это - относительно легкая задача на любой серьезной ОС. Можно создать файловую систему пространства пользователя очень легко с Моно. Предохранитель, реализация C# FUSE, Файловых систем в Пространстве пользователя. Я не уверен, что, если какое-либо портирование потребовалось бы, чтобы получать Dokan, FUSE для Windows, но FUSE хорошо работает на Linux, OSX и Солярисе.

-1
ответ дан 2 December 2019 в 20:41
поделиться

Я поддерживаю проект Jolt.NET на CodePlex, который содержит библиотека для создания таких интерфейсов и их реализаций для вас. Пожалуйста, обратитесь к библиотеке Jolt.Testing для получения дополнительной информации.

3
ответ дан 2 December 2019 в 20:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: